在方法的开头总是使所有输出参数无效是一种好的做法

时间:2012-12-24 10:45:03

标签: c# .net visual-studio design-patterns

I-sometimes-使用out参数,方法有时很复杂,并且包含循环和条件块,在大多数情况下编译器会给我这个错误

  

“out参数'xxx'必须在控制离开之前分配   目前的方法“

所以,我发现我的自己总是启动方法,使所有输出参数无效,我需要知道,这是一个好习惯吗?

*编辑*

我的意思是通过单词“Nullify”分配默认值!

8 个答案:

答案 0 :(得分:7)

我不会,因为保持未初始化会提示您在所有代码分支中设置相应的值(作为编译器错误),而不是忘记并保留null / etc。但是,如果您有多个代码路径,并且除了其中一个之外的所有代码路径都使用相同的默认值(例如TryGet / TryParse方法),那么在开始时分配默认值可能是实用的,所以只有一个其他任务。

答案 1 :(得分:2)

取决于您应用于null参数的含义。

通常null表示未定义的未知值,某些错误无法检索到该值。当您在其中一个参数中遇到null值时,通常不是正常的程序流程。

因此,最好定义一组统一的默认值,其含义为ready to be filled,如果出现意外情况,则将其置零。

当然,所有这些都取决于项目和目前的编码和命名标准

答案 2 :(得分:1)

我个人可能会返回一个类,而不是使用Out参数。他们在" TryParse"情况,但我认为如果过度使用它们会非常混乱。

答案 3 :(得分:1)

您肯定需要确保在方法的流程中设置了out参数。这是编译器所要求的,它是不可协商的:)

这样做的一种方法是将其设置为默认值,这样就可以了。但是,它可能会掩盖方法流不设置out参数的任何问题。

因此,最好在足够的单元测试中使用您的方法,以便确保代码以任何方式工作。

答案 4 :(得分:1)

如果你知道他们将填充一些有意义的数据,那么我就不会打扰它们但是如果它们在条件表达式中被赋值,那么在方法开始时将它们归零可能就好了。但是,设置默认值可能是更好的选择。我也试着尽可能少地使用params,我发现通常在你需要它们的时候你就会在某个地方出现设计错误。

答案 5 :(得分:1)

如果您在某个loopIf条件中分配值,那么在开始时initialize总是更好out parameters,否则就没有必要.... { {1}}

答案 6 :(得分:0)

让我们看看这段代码;

public void Get(out int Id_1, out int Id_2)
{
    if ( )
    {
        Id_1 = Value1;
        Id_2 = Value2;
    }
}

我们在if语句中分配Id_1Id_2,编译器无法确定是否在运行时为其分配值。我们应该在if语句之前为这些变量分配一些默认值。在我看来这是一个很好的做法。

public void Get(out int Id_1, out int Id_2)
{
    Id_1 = 0;
    Id_2 = 0;

    if ( )
    {
        Id_1 = Value1;
        Id_2 = Value2;
    }
}

答案 7 :(得分:0)

为什么不考虑Tuple <T>类而不是很多的参数......