LINQ和泛型型別 C

2021-08-25 07:21:13 字數 1612 閱讀 1105

linq 查詢基於泛型型別,在 .net framework 的 2.0 版中引入了泛型型別。

您無需深入了解泛型即可開始編寫查詢。

但是,您可能需要了解兩個基本概念:

當您建立泛型集合類(如 list<

(of

<

(t>

)>

))的例項時,您將「t」替換為列表將包含的物件的型別。

例如,字串列表表示為 list

,customer

物件列表表示為 list

。泛型列表是強型別的,且提供了比將其元素儲存為 object

的集合更多的好處。

如果您嘗試將 customer

新增到 list

,則會在編譯時出現一條錯誤。

泛型集合易於使用的原因是您不必執行執行時型別強制轉換。

ienumerable<

(of

<

(t>

)>

) 是乙個介面,通過該介面,可以使用foreach語句來列舉泛型集合類。

泛型集合類支援 ienumerable<

(of

<

(t>

)>

),就像非泛型集合類(如 arraylist

)支援 ienumerable。

有關泛型的更多資訊,請參見泛型(c# 程式設計指南)。

linq 查詢中的 ienumerable 變數

linq 查詢變數型別化為 ienumerable<

(of

<

(t>

)>

) 或派生型別,如 iqueryable<

(of

<

(t>

)>)。

當您看到型別化為 ienumerable

的查詢變數時,這只意味著在執行該查詢時,該查詢將生成包含零個或多個 customer

物件的序列。

ienumerablecustomerquery = from cust in customers where cust.city == "london" select cust; foreach (customer customer in customerquery)

有關更多資訊,請參見linq 查詢操作中的型別關係 (c#)。

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

如果您願意,可以使用 var

關鍵字來避免使用泛型語法。

var關鍵字指示編譯器通過檢視在from子句中指定的資料來源來推斷查詢變數的型別。

var customerquery2 = from cust in customers where cust.city == "london" select cust; foreach(var customer in customerquery2)

當變數的型別明顯或顯式指定巢狀泛型型別(如由組查詢生成的那些型別)並不重要時,var關鍵字很有用。

通常,我們建議如果您使用var,應意識到這可能使您的**更難以讓別人理解。

有關更多資訊,請參見隱式型別的區域性變數(c# 程式設計指南)。

C 泛型型別 泛型方法

泛型會宣告型別引數 泛型的消費者需要提供型別引數來把佔位符型別填充 public class stack var stack newstack int stack.push 2 stack.push 3 int x stack.pop 2int y stack.pop 3stack open typ...

C 泛型分組和Linq分組的異同

沒什麼好說的,因為用的到,所以作個記錄,如下 using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace consol...

C 泛型型別(十六)

概述 泛型類和泛型方法兼具可重用性 型別安全性和效率,這是非泛型類和非泛型方法無法實現的 泛型通常與集合以及作用於集合的方法一起使用 泛型所屬命名空間 system.collections.generic 可以建立自定義泛型介面 泛型類 泛型方法 泛型事件和泛型委託,以提供自己的通用解決方案,設計型...