Linq擴展方法簡單描述
本文向大家介紹Linq擴展方法,可能好多人還不了解Linq擴展方法,沒有關系,看完本文你肯定有不少收獲,希望本文能教會你更多東西。
Linq擴展方法
結果證明,更好的語法將以被稱為Linq擴展方法的語言功能形式出現(xiàn)。Linq擴展方法基本上屬于可通過實例語法調(diào)用的靜態(tài)方法。上述查詢問題的根源是我們試圖向 IEnumerable<T> 添加方法。但如果我們要添加運算符,如 Where、Select 等,則所有現(xiàn)有和未來的實現(xiàn)器都必須實現(xiàn)那些方法。盡管那些實現(xiàn)絕大多數(shù)都是相同的。在 C# 中共享“接口實現(xiàn)”的唯一方法是使用靜態(tài)方法,這是我們處理以前使用的EnumerableExtensions 類的一個成功方法。
假設我們轉(zhuǎn)而將 Where 方法編寫為Linq擴展方法。那么,查詢可重新編寫為:
- IEnumerable<Customer> locals = customers.Where(c => c.ZipCode == 91822);
對于此簡單查詢,該語法近乎***。但將 Where 方法編寫為Linq擴展方法的真正含義是什么呢?其實非常簡單?;旧希驗殪o態(tài)方法的簽名發(fā)生更改,因此“this”修飾符就被添加到***個參數(shù):
- public static IEnumerable<T> Where<T>(this IEnumerable<T> items, Func<T, bool> predicate)
此外,必須在靜態(tài)類中聲明該方法。靜態(tài)類是一種只能包含靜態(tài)成員,并在類聲明中用靜態(tài)修飾符表示的類。這就它的全部含義。此聲明指示編譯器允許在任何實現(xiàn) IEnumerable<T> 的類型上用與實例方法相同的語法調(diào)用 Where。但是,必須能夠從當前作用域訪問 Where 方法。當包含類型處于作用域內(nèi)時,方法也在作用域內(nèi)。因此,可以通過 Using 指令將Linq擴展方法引入作用域。
Linq擴展方法有助于簡化我們的查詢示例,但除此之外,這些方法是不是一種廣泛有用的語言功能呢?事實證明Linq擴展方法有多種用途。其中一個最常見的用途可能是提供共享接口實現(xiàn)。例如,假設您有以下接口:
- interface IDog
- {
- // Barks for 2 seconds
- void Bark();
- void Bark(int seconds);
- }
請注意,此查詢的返回類型不同,它是 IEnumerable<string> 而不是 IEnumerable<Customer>。這是因為我們僅從 select 語句中返回客戶名稱。
【編輯推薦】