訓練
如何在查詢運算式中使用隱含型別局部變數和陣列 (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}");
}