【发布时间】:2017-12-02 03:57:19
【问题描述】:
来自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
考虑以下代码:
void Foo(out int i1, out int i2)
{
i1 = 1;
i2 = 2;
}
int _;
Foo(out var _, out _);
Console.WriteLine(_); // outputs 2
问题:
为什么在这种情况下会输出“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
【问题讨论】:
-
我认为您的代码不正确。当您拨打您的
Foo()时,它很可能是Foo(out _);,尽管我可能完全误解了您的问题陈述。 -
_是变量的有效名称。 -
将此作为副本关闭。请参阅my answer to that duplicate question 了解何时将
_视为丢弃物以及何时不被视为丢弃物的详细信息。 TL&DR:如果将行更改为Foo(out var _, out var _);,那么即使_变量在范围内,这两个参数都将被视为丢弃。out _仅在没有_在范围内时被视为丢弃,否则它引用变量。