Share via


LINQ 和泛型型別 (C#)

LINQ 查詢是以 .NET Framework 2.0 版中就引進的泛型型別為基礎。 您不需要對泛型型別有相當程度的了解,就可以開始撰寫查詢。 不過,您可能需要了解兩個基本概念:

  1. 建立泛型集合類別 (Class) (如 List<T>) 的執行個體 (Instance) 時,請將 "T" 取代為清單中會包含之物件的型別。 例如,字串的清單是以 List<string> 表示,而 Customer 物件的清單則是以 List<Customer> 表示。 泛型清單是強型別的,而且優點多於以 Object 形式儲存項目的集合。 如果您嘗試將 Customer 加入至 List<string>,就會在編譯時期接收到錯誤。 泛型集合不需要執行執行階段的型別轉換 (Type Cast),因此十分容易使用。

  2. IEnumerable<T> 這個介面可讓您使用 foreach 陳述式來列舉泛型集合類別。 就像 ArrayList 等非泛型集合類別支援 IEnumerable,泛型集合類別同樣可以支援 IEnumerable<T>

如需泛型的詳細資訊,請參閱泛型 (C# 程式設計手冊)

LINQ 查詢中的 IEnumerable<T> 變數

LINQ 查詢變數的型別是 IEnumerable<T> 或諸如 IQueryable<T> 之類的衍生型別 (Derived Type)。 當您看到型別為 IEnumerable<Customer> 的查詢變數時,只表示查詢在執行時會產生由零個以上 Customer 物件組成的序列。

IEnumerable<Customer> customerQuery =
    from cust in customers
    where cust.City == "London"
    select cust;

foreach (Customer customer in customerQuery)
{
    Console.WriteLine(customer.LastName + ", " + customer.FirstName);
}

如需詳細資訊,請參閱LINQ 查詢作業中的型別關聯性 (C#)

讓編譯器處理泛型型別宣告

想要的話,您可以使用 var 關鍵字來避免使用泛型語法。 var 關鍵字會指示編譯器 (Compiler) 查看 from 子句中指定的資料來源,來推斷查詢變數的型別。 下列範例在編譯後會產生與上一個範例相同的程式碼:

var customerQuery2 = 
    from cust in customers
    where cust.City == "London"
    select cust;

foreach(var customer in customerQuery2)
{
    Console.WriteLine(customer.LastName + ", " + customer.FirstName);
}

var 關鍵字適用於當變數的型別很明顯,或不需要明確指定巢狀泛型型別 (如群組查詢產生的型別) 時。 一般而言,如果要使用 var,則建議您考慮到它會讓其他人更難看懂您的程式碼。 如需詳細資訊,請參閱隱含型別區域變數 (C# 程式設計手冊)

請參閱

參考

泛型 (C# 程式設計手冊)

其他資源

開始使用 C# 中的 LINQ