HOW TO:在查詢運算式中使用隱含型別區域變數和陣列 (C# 程式設計手冊)
只要您想要編譯器判斷區域變數的型別,就可以使用隱含型別區域變數。 您必須使用隱含型別區域變數來儲存匿名型別,這些型別經常在查詢運算式中使用。 下列範例顯示在查詢中選擇性和必要的隱含型別區域變數用法。
隱含型別區域變數是使用 var 內容關鍵字宣告。 如需詳細資訊,請參閱隱含型別區域變數 (C# 程式設計手冊) 和隱含型別陣列 (C# 程式設計手冊)。
範例
下列範例說明必須使用 var 關鍵字的常見情節:產生匿名型別序列的查詢運算式。 在此情節中,foreach 陳述式中的查詢變數和反覆運算變數必須使用 var 設為隱含型別,因為您未具備存取匿名型別之型別名稱的權限。 如需匿名型別的詳細資訊,請參閱匿名型別 (C# 程式設計手冊)。
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);
}