C#3.0新增功能09 LINQ 基礎03 LINQ 和泛型類型

  • 2019 年 10 月 4 日
  • 筆記

LINQ 查詢基於 .NET Framework 版本 2.0 中引入的泛型類型。 無需深入了解泛型即可開始編寫查詢。 但是,可能需要了解 2 個基本概念:

  1. 創建泛型集合類(如 List<T>)的實例時,需將「T」替換為列表將包含的對象類型。 例如,字元串列表表示為 List<string>Customer 對象列表表示為 List<Customer>。泛型列表屬於強類型,與將其元素存儲為 Object 的集合相比,泛型列表具備更多優勢。 如果嘗試將 Customer 添加到 List<string>,則會在編譯時收到錯誤。 泛型集合易於使用的原因是不必執行運行時類型轉換。
  2. IEnumerable<T> 是一個介面,通過該介面,可以使用 foreach 語句來枚舉泛型集合類。 泛型集合類支援 IEnumerable<T>,正如非泛型集合類(如 ArrayList)支援 IEnumerable

有關泛型的詳細資訊,請參閱泛型

LINQ 查詢中的 IEnumerable 變數

LINQ 查詢變數被類型化為 IEnumerable<T> 或者派生類型(如 IQueryable<T>)。 看到類型化為 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 查詢操作中的類型關係

讓編譯器處理泛型類型聲明

如果願意,可以使用 var 關鍵字來避免使用泛型語法。 var 關鍵字指示編譯器通過查看在 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關鍵字很有用。