6

outC# 7 引入内联参数但不引入内联参数是否有特定原因ref

以下在 C# 7 上有效:

int.TryParse("123", out _);

但这是无效的:

public void Foo(ref int x) { }

Foo(ref _); // error

我看不出为什么不能将相同的逻辑应用于ref参数。

4

1 回答 1

12

原因很简单:因为不允许将未初始化的变量传递给ref参数。情况一直如此,C#7 中的新语法糖并没有改变这一点。

观察:

int i;
MyOutParameterMethod(out i);  // allowed

int j;
MyRefParameterMethod(ref j);  // compile error

C#7 中的新功能允许您在使用参数调用方法的过程中创建变量out。它不会更改有关未初始化变量的规则。参数的目的ref是允许将已经初始化的值传递给方法,并且(可选地)允许更改原始变量。方法体内的编译器语义将ref参数视为已初始化的变量,将out参数视为未初始化的变量。它在 C#7 中仍然如此。

于 2017-04-14T13:45:17.163 回答