3

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

“必须在控制离开当前方法之前分配输出参数‘xxx’”

所以,我发现我自己总是以取消所有参数来启动方法,我需要知道,这是一个好习惯吗?

* 编辑 *

我的意思是用“Nullify”这个词分配默认值!

4

8 回答 8

7

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

于 2012-12-24T10:57:08.067 回答
2

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

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

因此,最好定义一组统一的默认值,其含义将为ready to be filled,并在发生意外情况时将其无效。

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

于 2012-12-24T10:53:37.180 回答
1

就个人而言,我可能会返回一个类而不是使用 Out 参数。它们在“TryParse”情况下很棒,但我认为如果过度使用它们会很混乱。

于 2012-12-24T10:50:17.597 回答
1

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

一种方法是在开始时将其设置为默认值,这样就可以了。但是,它可以掩盖方法流程未设置 out 参数的任何问题,并且应该设置。

所以,最好在足够多的单元测试中使用你的方法,这样你就可以确定代码无论哪种方式都可以工作。

于 2012-12-24T10:51:22.187 回答
1

如果您知道它们将填充一些有意义的数据,那么我不会费心将它们归零,但如果它们在条件表达式中获得分配值,那么在方法开始时将它们归零可能很好。但是,设置默认值可能是更好的选择。我还尝试尽可能少地使用参数,我发现通常当你需要它们时,你在某个地方犯了设计错误。

于 2012-12-24T10:55:21.157 回答
1

loop如果你在某些或条件下赋值,If那么它总是比initializeout parameters开始更好,否则它没有必要....but for good practice we should always assign the value at the beginning

于 2012-12-24T11:11:13.347 回答
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;
    }
}
于 2012-12-24T10:57:41.110 回答
0

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

于 2012-12-24T10:58:37.070 回答