来自https://blogs.msdn.microsoft.com/dotnet/2017/03/09/new-features-in-c-7-0/:
我们允许"丢弃"作为输出参数,以_的形式,让你忽略你不关心的参数:
p.GetCoordinates(out var x, out _); // I only care about x
Run Code Online (Sandbox Code Playgroud)
请考虑以下代码:
void Foo(out int i1, out int i2)
{
i1 = 1;
i2 = 2;
}
int _;
Foo(out var _, out _);
Console.WriteLine(_); // outputs 2
Run Code Online (Sandbox Code Playgroud)
问题:
为什么在此上下文中输出"discard"out参数?
此外,不应该有"已定义的范围"错误out var _?
int i;
Foo(out var i, out i);
Console.WriteLine(i); // Error: A local variable or function named 'i'
// is already defined in this scope
Run Code Online (Sandbox Code Playgroud)
但是,从语义上讲,我们希望它创建一个匿名变量,并从名为_的封闭范围中隐藏任何真实变量(例如参数或字段).
......
我们必须小心这些更改,以便任何使用_作为标识符并且今天合法的程序继续按照这些修订的规则进行编译.
_ 如果您声明并使用它,则仅表示"丢弃此参数"
out元组和类似的参数和解构switch... case int _)这out var _是其中之一.
但是,这int _;是一个单独的陈述,因此这表示您"关心"这个变量,因此它不是丢弃.
因此,您将获得具有名称的正常变量_,这仍然是合法的.这将从方法调用中获取值2,如预期的那样.
| 归档时间: |
|
| 查看次数: |
2900 次 |
| 最近记录: |