【发布时间】:2017-08-12 17:39:40
【问题描述】:
我正在阅读 C#7 here 中的新变量特性。我有两个问题:
-
它说
我们也允许“丢弃”作为输出参数,以
_的形式,让您忽略您不关心的参数:p.GetCoordinates(out var x, out _); // I only care about x问:我想这只是一个信息,而不是 C#7 的新功能,因为我们也可以在 C#7.0 之前这样做:
var _; if (Int.TryParse(str, out _)) ...还是我在这里遗漏了什么?
-
当我按照同一篇博客中的说明进行操作时,我的代码会出错:
~Person() => names.TryRemove(id, out *);*不是有效标识符。我猜是 Mads Torgersen 的疏忽?
【问题讨论】:
-
in
out __不是变量,您不声明它,也不能按名称使用它。在int _中,这是一个变量。 -
星号通配符似乎没有进入 C# 7 的最终版本。
-
@NikhilAgrawal 但这是不同的语法。在您的问题中,您使用
out _,而不使用var。var确实和以前一样。 -
@NikhilAgrawal 确实出于某种奇怪的原因编译。但是,如果查看反编译的代码——这个赋值是不存在的,完全被删除了。而且,如果您执行
Console.WriteLine(_)之类的操作,则不会编译声称没有这样的变量。很奇怪。更重要的是:如果您执行_ = SomeMethodCall()之类的操作 - 在编译后的代码中,这将被替换为SomeMethodCall()。所以毕竟你仍然不能在任何有意义的意义上真正使用这个变量。