[英]Type inference rules in C#?
我閱讀了以下MSDN 頁面,其中說明了以下有趣的事情:
第一條規則是 var 聲明遵循正常的類型推斷規則:類型被推斷為 switch 表達式的 static 類型。 根據該規則,類型始終匹配。
在 MSDN 中,我找不到對所謂“正常類型推理規則”的引用,為什么在這個意義上使用的var
會推斷出開關表達式的 static 類型?
也許我不知道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
類型是什么。 我知道static
關鍵字的作用,但我不認為這就是 switch 表達式中發生的事情。
在您鏈接的示例中,通過“開關表達式的 static 類型”,它們指的是變量shapeDescription
的類型 - 例如類型string 。
換句話說,遵循“普通類型推斷規則” - var o
也有類型string 。
static object CreateShape(string shapeDescription)
{
switch (shapeDescription)
{
// removed for conciness
case var o when (o?.Trim().Length ?? 0) == 0:
// white space
return null;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.