如何在查詢運算式中使用隱含型別區域變數和陣列 (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: {0}", str);
}

另請參閱