C#7:在Out变量中使用下划线(_)和星号(*)
我在这里阅读有关C#7中新的可变功能的信息。我有两个问题:
- 它说
我们还允许以“”形式将“丢弃”作为输出参数
_
,以使您忽略不需要的参数:> 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的疏忽吗?
回答:
C#7中的Discards可以在声明变量的任何地方使用,以顾名思义,可以丢弃结果。因此,可以将out与变量一起使用:
p.GetCoordinates(out var x, out _);
它可以用来丢弃表达式结果:
_ = 42;
在这个例子中
p.GetCoordinates(out var x, out _);_ = 42;
没有_
引入任何变量。只有两种情况使用了丢弃。
但是,如果_
范围中存在标识符,则不能使用丢弃:
var _ = 42;_ = "hello"; // error - a string cannot explicitly convert from string to int
例外是将_
变量用作输出变量时。在这种情况下,编译器将忽略该类型或var
将其视为丢弃:
if (p.GetCoordinates(out double x, out double _)){
_ = "hello"; // works fine.
Console.WriteLine(_); // error: _ doesn't exist in this context.
}
请注意,这种情况仅在使用out var _
或的情况下发生out double _
。只需使用out
_,然后将其视为对现有变量的引用_
,如果它在范围内,例如:
string _;int.TryParse("1", out _); // complains _ is of the wrong type
最后,该*
符号是在有关丢弃的讨论中提早提出的,但_
由于后者是其他语言中更常用的符号,因此被放弃使用。
以上是 C#7:在Out变量中使用下划线(_)和星号(*) 的全部内容, 来源链接: utcz.com/qa/433948.html