给出以下代码:
string someString = null;
switch (someString)
{
case string s:
Console.WriteLine("string s");
break;
case var o:
Console.WriteLine("var o");
break;
default:
Console.WriteLine("default");
break;
}
为什么switch语句匹配case var o
?
我的理解是case string s
不匹配的,s == null
因为(有效)(null as string) != null
评估为假。VS Code上的IntelliSense告诉我这o
也是一个string
。有什么想法吗?
类似于:使用空检查的C#7切换大小写
var
这种情况。这种确定性似乎是我在C ++中会发现的那种东西,而不是用一种旨在使程序员“进入成功之门”的语言。在这里,var
模棱两可和无用的是C#设计通常努力避免的事情。
switch
可能无法发音-匿名类型等;并没有歧义 -编译器清楚地知道类型;(至少对我而言)这些null
规则是如此的令人困惑!
o
情况下string
(已通过泛型确认-即Foo(o)
whereFoo<T>(T template) => typeof(T).Name
)-这是一个非常有趣的情况,即使与(由编译器键入)键入时,string x
其行为也不同,例如var x
x
string