在C#7中使用Var模式

Jos*_*una 15 c# pattern-matching

我在新的C#7中看到了var模式的这个例子

if (o is var x) Console.WriteLine($"it's a var pattern with the type {x?.GetType()?.Name}");
Run Code Online (Sandbox Code Playgroud)

只是使用有什么不同:

var x = o;
Console.WriteLine($"it's a var pattern with the type {x?.GetType()?.Name}");
Run Code Online (Sandbox Code Playgroud)

当这种模式是一个有用的解决方案.

Emd*_*dot 34

这个例子没有实际的区别.不幸的是,很多网站都使用它 - 甚至是语言参考.

x is var y如果在布尔表达式中需要临时变量,则使用该模式的主要原因.例如:

allLists.Where(list => list.Count() is var count && count >= min && count <= max)
Run Code Online (Sandbox Code Playgroud)

通过创建临时变量,count我们可以多次使用它,而无需Count()每次调用的性能成本.

在那个例子中我们可以使用is int count- 这var只是一种风格选择.但是,有两种情况var需要:对于匿名类型或者如果要允许空值.后者是因为null不匹配任何类型.

if但是,具体来说,你可以做同样的事情:if (list.Count() is var count && count >= min && count <= max).但这显然是愚蠢的.普遍的共识似乎是它没有好用if.但是语言不会阻止你,因为从特定的表达式语句中禁止这种特定的表达形式会使语言复杂化.

  • 文档问题已[解决](https://github.com/dotnet/docs/issues/11804)。 (2认同)