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

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

  1. 建立泛型集合類(如 List<T>)的實例時,需將「T」替換爲列表將包含的對象類型。 例如,字符串列表表示爲 List<string>Customer 對象列表表示爲 List<Customer>泛型列表屬於強類型,與將其元素存儲爲 Object 的集合相比,泛型列表具有更多優點。 若是嘗試將 Customer 添加到 List<string>,則會在編譯時收到錯誤。 泛型集合易於使用的緣由是沒必要執行運行時類型轉換。api

  2. IEnumerable<T> 是一個接口,經過該接口,可使用 foreach 語句來枚舉泛型集合類。 泛型集合類支持 IEnumerable<T>,正如非泛型集合類(如 ArrayList)支持 IEnumerableide

有關泛型的詳細信息,請參閱泛型ui

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 查詢操做中的類型關係spa

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

 若是願意,可使用 var 關鍵字來避免使用泛型語法。 var 關鍵字指示編譯器經過查看在 from 子句中指定的數據源來推斷查詢變量的類型。 如下示例生成與上例相同的編譯代碼:code

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,應意識到這可能使他人更難以理解代碼。有關詳細信息,請參閱隱式類型局部變量htm

相關文章
相關標籤/搜索