总是在方法开始时取消所有参数是一种好做法吗?

本文关键字:一种 开始时 方法 取消 参数 | 更新日期: 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参数的任何问题。

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

如果你知道一个事实,他们将与一些有意义的数据填充,那么我不会打扰空它们,但如果他们在条件表达式中被赋值,然后在方法开始时空它们可能是好的。但是,设置默认值可能是更好的选择。我也尝试尽可能少地使用参数,我发现通常当你需要它们时,你已经在某个地方犯了设计错误。

如果你在某些loopIf条件下赋值,那么最好在开始时将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_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;
    }
}

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

相关文章: