本地函数 - 分配变量

Local function - assigning variable

我想知道 "correct" 或 "recommended" 编写本地函数的方法是什么 return 是一个值并将其分配给 [=34= 中的变量] 功能。 (本地函数 "host" 的实际名称是什么?)

我看到了以下 3 种可能性(也许还有更多):

第一种方式似乎最合法,因为它不违反查询-命令分离原则。如果方法的 return 类型是 Int32(第 3 个示例),我希望该方法不会更改任何状态,但是它确实会更改变量的值超出其范围。第二个例子更好,但仍然过于含蓄。如果您的目标是 return 某事 - return 就可以了。关心接下来会发生什么不是你的责任。

简单的答案是:如果您可以编写不需要修改成员变量的函数,您会发现它们更容易测试并且不太可能影响其余部分的行为以意想不到的方式编程。 对于像你的例子这样的事情,我能想到的将计算结果存储在成员变量中的几个很好的理由之一是这样做特别昂贵,并且你需要在未来的各种未指定点使用结果.

如果我们将您的前两个代码示例放入 SharpLab,我们可以看到编译器将代码降低为:

For code sample 1:

public class C
{
    private void Foo()
    {
        C.<Foo>g__Sum|0_0(1, 2);
    }

    [CompilerGenerated]
    internal static int <Foo>g__Sum|0_0(int a, int b)
    {
        return a + b;
    }
}

For code sample 2:

public class C
{
    [CompilerGenerated]
    [StructLayout(LayoutKind.Auto)]
    private struct <>c__DisplayClass0_0
    {
        public int sum;
    }

    private void Foo()
    {
        C.<>c__DisplayClass0_0 <>c__DisplayClass0_;
        C.<Foo>g__Sum|0_0(1, 2, ref <>c__DisplayClass0_);
    }

    [CompilerGenerated]
    internal static void <Foo>g__Sum|0_0(int a, int b, ref C.<>c__DisplayClass0_0 ptr)
    {
        ptr.sum = a + b;
    }
}

在第二个示例中,创建结构的开销很小,其中存储了 sum

除此之外,"best" 确实是主观的。在我看来,示例 1 更容易理解。同意不同意纯属见仁见智

我唯一要表达强烈意见的是不要执行选项 3。重新使用相同的名称,sum 在我看来简直令人困惑。同样,这只是个人意见。