为什么ref参数不能像out参数一样被忽略?

Why ref parameters can not be ignored like out parameters?

C# 7 带来内联 out 参数而不是 ref 有什么具体原因吗?

以下内容适用于 C# 7:

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

但这是无效的:

public void Foo(ref int x) { }

Foo(ref _); // error

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

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

观察:

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

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

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