Linq本質簡單分析
本文向大家介紹Linq本質,可能好多人還不了解Linq本質,沒有關系,看完本文你肯定有不少收獲,希望本文能教會你更多東西。
本文的目的是幫助大家搞清楚C#3.0里面的Linq查詢表達式的來龍去脈,搞清楚以后對C#3.0的新特性基本上也就了然于胸了。建議大家看完Linq查詢后再看各個語法新特性對Linq的意義,這樣會更加有幫助一些。
1.匿名類型
- private static void AnonymousType()
- {
- var v = new { Name = "張三", Sex = true };
- //無須顯示聲明一個類,而且在初始化器里面可以獲取上下文的變量——閉包
- Console.WriteLine(v.Name);
- }
Linq本質:有了匿名類型后我們不需要顯示的聲明一個類型了,這個類型由C#編譯器自動生成,而且利用了初始化器和var的新特性對Linq的意義:和初始化器結合起來構造查詢結果集合里面的新元素類型。
2.擴展方法
比如我們現在想給int類型增加(擴展)一個方法,判斷一個整數自身是否偶數,我們期望的語法是這樣的:
- private static void ExtendMethod()
- {
- int i = 2;
- Console.WriteLine(i.IsEven());
- }
注意原來int原來是沒有IsEven()這個方法的,要實現這個方法,必須寫一個靜態類和一個靜態方法:
- static class MyExtention
- {
- public static bool IsEven(this int num)
- //this 表示針對int的實例和索引器的this的含義是一樣的,int表示給int這種類型進行擴展
- {
- return num % 2 == 0;
- }
- }
Linq本質:編譯i.IsEven()的本質是C#編譯器生成了了MyExtention.IsEven(i)的代碼,實際上仍然沒有破壞類型的結構,并不是真的象語法那樣平白無故給int增加了一個IsEven()方法,和設計模式里面的Visitor模式動態注入方法還是有區別的。
【編輯推薦】