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