C#中的类型推理规则



我阅读了以下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类型是什么。我知道var0关键字的作用,但我不认为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;
}
}

最新更新