簡體   English   中英

C#中的類型推理規則?

[英]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推斷xSystem.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM