我阅读了以下MSDN页面,其中介绍了以下有趣的内容:
第一条规则是var声明遵循正常类型推理规则:该类型被推断为switch表达式。根据该规则,类型始终匹配。
在MSDN中找不到所谓的";正常类型推理规则";,为什么CCD_ 1在这个意义上被用来推断开关表达式的静态类型?
也许我不知道static
类型是什么。我知道static
关键字的作用,但我不认为switch表达式中会发生这种情况。
C#是一种静态类型语言,这意味着类型必须在编译时已知,并且分配给变量的类型在运行时不能更改。首先考虑以下所有行的结果完全相同:
int x = 123;
System.Int32 x = 123;
var x = 123;
int
只是System.Int32
的别名- 编译器在使用
var
时推断x
的类型为System.Int32
,因为它被分配了一个整数
不能用C#做的事情,在动态类型语言(如javaScript(中可以做的是:
var x = 123;
x = "Hello world";
在C#中,编译器会抱怨您无法将字符串分配给int变量,但JavaScript作为一种动态语言将允许这样做
也许我不知道
static
类型是什么。我知道var
0关键字的作用,但我不认为switch表达式中会发生这种情况。
在您链接的示例中,通过">开关表达式的静态类型";它们指的是变量CCD_ 11的类型,例如类型string。
换言之正常类型推理规则"-CCD_ 12也具有类型字符串。
static object CreateShape(string shapeDescription)
{
switch (shapeDescription)
{
// removed for conciness
case var o when (o?.Trim().Length ?? 0) == 0:
// white space
return null;
}
}