我知道如果它是null,有一些不同的方法可以使用它。
我的问题虽然有点不同。 也许我只是没有考虑过,可能有一个现有的解决方案。
我想检查变量是否为空。
如果是,则从方法返回特定值。
如果它不为null,则继续处理该方法。
我需要在方法的不同位置进行空检查。我的一些代码可能有三个或四个需要检查的输入参数
所以我无法使用if (parameter1 == null || parameter2 == null)
。
考虑下面的例子,最好的方法是什么? 我基本上试图减少所需的代码量。
public List<OutputClass> GetOutputs(InputClass input1, OtherInputClass input2)
{
if (input == null)
{
return new List<OutputClass>();
}
// continue with processing
// do something with input1
if (input2 == null)
{
return new List<OutputClass>();
}
// continue with processing
// do something with input2
var outputs = //some processing using the input data;
return outputs;
}
答案 0 :(得分:3)
给出你的示例代码,如果任何一个参数为null,你返回一个新的列表,我会建议你事先做所有的参数验证,这样你就不会浪费任何处理时间来处理那些只会被抛弃的事情。后面的参数检查返回为null:
public List<OutputClass> GetOutputs(InputClass input1, OtherInputClass input2)
{
var outputs = new List<OutputClass>();
if (input1 == null || input2 == null)
{
return outputs;
}
// continue with processing
// do something with input1
OutputClass output1 = GetOutput(input1.SomeValue);
// do something with input2
OutputClass output2 = GetOutput(new CustomClass(input2.AnotherValue));
// create outputs based on the input data
outputs.Add(output1);
outputs.Add(output2);
return outputs;
}
如果验证input1
和input2
之间所需的处理对程序状态进行了一些更改,那么您可能需要进行一些额外的重构。一般来说,方法应尽可能谨慎,只做一件事。你必须小心副作用。从客户端的角度来看,如果其中一个或两个参数为null,它们将获得相同的返回值。一般的期望是,在这3个案例中,该计划的状态也将保持不变。
然而,这是一般性建议;如果你给出了一个更具体的例子,你可能会得到一个更好的答案。
答案 1 :(得分:0)
我通常会在您描述的场景中使用私人帮助函数,但最终取决于具体情况。
例如:
public List<OutputClass> GetOutputs(InputClass inputOne, OtherInputClass inputTwo) {
List<OutputClass> allTogether;
// do something with inputOne
allTogether = GetOutputsHelperOne(inputOne);
// do something with inputTwo
allTogether = GetOutputsHelperTwo(inputTwo, allTogether);
var outputs = // some processing using 'allTogether'
return outputs; // or just return 'allTogether'
}
/*
* Do something with inputOne
*/
private List<OutputClass> GetOutputsHelperOne(InputClass inputOne) {
List<OutputClass> tmp = new List<OutputClass>();
if (inputOne == null) {
return tmp;
}
// else do something to 'tmp' with 'inputOne'
return tmp;
}
/*
* Do something with inputTwo
*/
private List<OutputClass> GetOutputsHelperTwo(OtherInputClass inputTwo, List<OutputClass> allTogether) {
List<OutputClass> tmp = new List<OutputClass>();
if (inputTwo == null) {
return allTogether;
}
// else do something to 'tmp' with 'inputTwo'
// or just manipulate 'allTogether' with 'inputTwo'
// then merge 'tmp' with 'allTogether'
// or just return 'allTogether'
return allTogether;
}
很抱歉,如果上述语法不正确,我不会在C#
中编程,只需将其作为伪代码。