I-sometimes-使用out参数,方法有时很复杂,并且包含循环和条件块,在大多数情况下编译器会给我这个错误
“out参数'xxx'必须在控制离开之前分配 目前的方法“
所以,我发现我的自己总是启动方法,使所有输出参数无效,我需要知道,这是一个好习惯吗?
*编辑*
我的意思是通过单词“Nullify”分配默认值!
答案 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)
如果您在某个loop
或If
条件中分配值,那么在开始时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_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;
}
}
答案 7 :(得分:0)
为什么不考虑Tuple <T>
类而不是很多的参数......