C#7:在Out变量中使用下划线(_)和星号(*)

我在这里阅读有关C#7中新的可变功能的信息。我有两个问题:

  1. 它说

我们还允许以“”形式将“丢弃”作为输出参数_,以使您忽略不需要的参数:

>     p.GetCoordinates(out var x, out _); // I only care about x

我想这只是C#7的一个信息而不是一项新功能,因为我们也可以在C#7.0之前的版本中这样做:

    var _;

if (Int.TryParse(str, out _))

...

还是我在这里想念东西?

  1. 当我在同一博客中提到时,我的代码给出了一个错误:
    ~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

回到顶部