我 - 有时 - 使用 out 参数,方法有时很复杂,并且包含循环和条件块,在大多数情况下编译器会给我这个错误
“必须在控制离开当前方法之前分配输出参数‘xxx’”
所以,我发现我自己总是以取消所有参数来启动方法,我需要知道,这是一个好习惯吗?
* 编辑 *
我的意思是用“Nullify”这个词分配默认值!
我 - 有时 - 使用 out 参数,方法有时很复杂,并且包含循环和条件块,在大多数情况下编译器会给我这个错误
“必须在控制离开当前方法之前分配输出参数‘xxx’”
所以,我发现我自己总是以取消所有参数来启动方法,我需要知道,这是一个好习惯吗?
* 编辑 *
我的意思是用“Nullify”这个词分配默认值!
我不会,因为不初始化它们会提示您在所有代码分支中设置适当的值(作为编译器错误),而不是忘记并留下 null/etc。但是,如果您有多个代码路径,并且其中一个都使用相同的默认值(如TryGet
/TryParse
方法),那么在开始时分配默认值可能是实用的,因此只有一个其他分配。
取决于您应用于null
参数的含义。
通常null
表示未定义的未知值,由于某些错误而无法检索。当您null
在其中一个参数中遇到值时,通常不是正常的程序流程。
因此,最好定义一组统一的默认值,其含义将为ready to be filled
,并在发生意外情况时将其无效。
当然,所有这些都取决于项目以及编码和命名的当前标准
就个人而言,我可能会返回一个类而不是使用 Out 参数。它们在“TryParse”情况下很棒,但我认为如果过度使用它们会很混乱。
您肯定需要确保在方法流程中设置了 out 参数。这是编译器所要求的,这是不可协商的:)
一种方法是在开始时将其设置为默认值,这样就可以了。但是,它可以掩盖方法流程未设置 out 参数的任何问题,并且应该设置。
所以,最好在足够多的单元测试中使用你的方法,这样你就可以确定代码无论哪种方式都可以工作。
如果您知道它们将填充一些有意义的数据,那么我不会费心将它们归零,但如果它们在条件表达式中获得分配值,那么在方法开始时将它们归零可能很好。但是,设置默认值可能是更好的选择。我还尝试尽可能少地使用参数,我发现通常当你需要它们时,你在某个地方犯了设计错误。
loop
如果你在某些或条件下赋值,If
那么它总是比initialize
一out parameters
开始更好,否则它没有必要....but for good practice we should always assign the value at the beginning
我们来看这段代码;
public void Get(out int Id_1, out int Id_2)
{
if ( )
{
Id_1 = Value1;
Id_2 = Value2;
}
}
我们在 if 语句中进行赋值Id_1
,Id_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;
}
}
为什么不考虑Tuple <T>
类而不是大量的输出参数......