总是在方法开始时取消所有参数是一种好做法吗?
本文关键字:一种 开始时 方法 取消 参数 | 更新日期: 2023-09-27 17:49:36
我-有时-使用out参数,方法有时很复杂,并且包含循环和条件块,在大多数情况下编译器给我这个错误
"输出参数'xxx'必须在控制离开之前赋值当前方法
所以,我发现我自己总是用无效的所有参数开始方法,我需要知道,这是一个好的做法吗?
* EDIT *
我的意思是通过单词" null "来分配默认值!
我不会,因为不初始化它们会提示您在所有代码分支中设置适当的值(作为编译器错误),而不是忘记并留下null/等。但是,如果您有多个代码路径,并且除了其中一个之外所有代码路径都使用相同的默认值(如TryGet
/TryParse
方法),那么在开始时分配默认值可能是实用的,因此只有一个其他赋值。
取决于您应用于null
参数的含义
通常null
表示未定义的未知值,由于某些错误无法检索。当你在一个参数中遇到null
值时,它通常不是正常的程序流程。
因此,最好定义一组统一的默认值,其含义为ready to be filled
,并在发生意外情况时将其取消。
当然,所有这些都取决于项目和当前的编码和命名标准
我个人可能会返回一个类而不是使用Out参数。它们在"TryParse"的情况下是很好的,但我认为如果过度使用它们可能会很混乱。
您肯定需要确保out参数在方法流中设置。这是编译器所要求的,没有商量的余地:)
一种方法是在开始时将其设置为默认值,这是可行的。但是,它可以掩盖方法流没有设置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>
类而不是大量的参数......