【发布时间】:2018-02-23 11:01:42
【问题描述】:
我不明白 C#7 中 var 模式的用例。 MSDN:
与
var模式的模式匹配总是成功的。它的语法是
expr is var varname
其中 expr 的值总是分配给一个名为的局部变量
varname。varname是与expr相同类型的静态变量。
我认为 MSDN 上的示例毫无用处,尤其是因为 if 是多余的:
object[] items = { new Book("The Tempest"), new Person("John") };
foreach (var item in items) {
if (item is var obj)
Console.WriteLine($"Type: {obj.GetType().Name}, Value: {obj}");
}
在这里我看不到任何好处,如果您直接访问也是Object 类型的循环变量item,您可能会有同样的好处。 if 也令人困惑,因为它从来都不是 false。
我可以直接使用var otherItem = item 或item。
有人可以更好地解释用例吗?
【问题讨论】:
-
IMO 这必须被视为 is type 模式的扩展,如果
type是var -
可以用来引入临时变量:
if (s.FirstOrDefault(o => o != null) is var v && int.TryParse(v, out var n)) -
@Dennis_E 这是一个很好的例子,为什么我要避免这种模式。看起来它阻止了
TryParse方法中的空引用异常,但它并没有因为模式总是成功。将var替换为实际类型,例如string会改变这种行为,如果不是说不好的话,这真的是违反直觉的。
标签: c# pattern-matching c#-7.0