如果方法参数为NULL则返回值,否则不返回

时间:2018-01-29 20:09:27

标签: c# .net

我知道如果它是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;
}

2 个答案:

答案 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;
}

如果验证input1input2之间所需的处理对程序状态进行了一些更改,那么您可能需要进行一些额外的重构。一般来说,方法应尽可能谨慎,只做一件事。你必须小心副作用。从客户端的角度来看,如果其中一个或两个参数为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#中编程,只需将其作为伪代码。