閱讀英文

共用方式為


如何在查詢運算式中使用隱含型別局部變數和陣列 (C# 程式設計手冊)

每當您希望由編譯器決定局部變數的類型時,都可以使用隱含型別局部變數。 您必須使用隱含型別局部變數來儲存匿名型別,這些類型通常用於查詢表達式中。 下列範例說明查詢中隱含類型局部變數的選擇性和必要用法。

隱含型別局部變數是使用 var 內容關鍵詞來宣告。 如需詳細資訊,請參閱 隱含型別局部變數隱含型別陣列

範例

下列範例顯示需要 var 關鍵詞的常見案例:產生匿名型別序列的查詢表達式。 在此情境中,foreach 語句中的查詢變數和迭代變數都必須使用 var 進行隱式類型化,因為您無法取得匿名型別的類型名稱。 如需匿名型別的詳細資訊,請參閱 匿名型別

private static void QueryNames(char firstLetter)
{
    // Create the query. Use of var is required because
    // the query produces a sequence of anonymous types:
    // System.Collections.Generic.IEnumerable<????>.
    var studentQuery =
        from student in students
        where student.FirstName[0] == firstLetter
        select new { student.FirstName, student.LastName };

    // Execute the query and display the results.
    foreach (var anonType in studentQuery)
    {
        Console.WriteLine("First = {0}, Last = {1}", anonType.FirstName, anonType.LastName);
    }
}

下列範例會在類似的情況下使用 var 關鍵詞,但其中 var 的使用是選擇性的。 因為 student.LastName 是字串,因此執行查詢會傳回一連串字元串。 因此,queryId 的類型可以宣告為 System.Collections.Generic.IEnumerable<string>,而不是 var。 關鍵詞 var 用於方便使用。 在此範例中,foreach 語句中的反覆專案變數會明確輸入為字元串,但可以使用 var來宣告它。 因為反覆運算變數的類型不是匿名類型,所以使用 var 是選項,而不是需求。 請記住,var 本身不是類型,而是編譯程式推斷並指派類型的指示。

// Variable queryId could be declared by using
// System.Collections.Generic.IEnumerable<string>
// instead of var.
var queryId =
    from student in students
    where student.Id > 111
    select student.LastName;

// Variable str could be declared by using var instead of string.
foreach (string str in queryId)
{
    Console.WriteLine($"Last name: {str}");
}

另請參閱