C#3.0新增功能09 LINQ 基礎03 LINQ 和泛型類型
- 2019 年 10 月 4 日
- 筆記
LINQ 查詢基於 .NET Framework 版本 2.0 中引入的泛型類型。 無需深入了解泛型即可開始編寫查詢。 但是,可能需要了解 2 個基本概念:
- 創建泛型集合類(如 List<T>)的實例時,需將「T」替換為列表將包含的對象類型。 例如,字元串列表表示為
List<string>
,Customer
對象列表表示為List<Customer>
。泛型列表屬於強類型,與將其元素存儲為 Object 的集合相比,泛型列表具備更多優勢。 如果嘗試將Customer
添加到List<string>
,則會在編譯時收到錯誤。 泛型集合易於使用的原因是不必執行運行時類型轉換。 - 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
關鍵字很有用。