Linq的那些事——從Linq擴充方法回顧C#語言基礎

來源:互聯網
上載者:User

林奇,某市A大學電腦系大三的學生,性格孤僻,除了玩電腦打籃球以外沒有其他愛好,習慣一個人呆在宿舍上網,學習成績一般。李秋,林奇的同學兼女友,性格開朗,喜歡接觸新事物,特別熱衷於新技術的學習和應用而且英語特別的優秀。

話說自微軟發布了Linq以後,李秋就一直潛心於該技術的學習和應用每天除了上必修課以外就沒有出過宿舍,兩人也有近3個月沒有約會,平常的溝通主要通過網路。一天林奇實在是憋不住了於是在qq上...

林:你最近還在研究Linq嗎?才出來不久,中文版的資料都還沒翻譯過來幹嗎那麼急?
李:你不知道,Linq太偉大了。
林:有多偉大啊!難不成他會到飯堂給你打飯不成?
李:你聽俺說吧!Linq就是語言級整合查詢(Language INtegrated Query),通過它我們可以查詢多種形式的資料比如有SQL,Dataset和XML等等。
林:好像很牛哦!俺就不信它那麼就一點缺點都沒有!
李:當然啦!任何事物都會有弱點的Linq也不能例外,舉個例子說把!在國外就有人發現了Linq其中一個操作符號Sum會出現問題。
林:啥問題啊?
李:由於它的作用主要是進行算術和的運算而且返回int32類型的值,所以當計算大量資料的時候很容易出現緩衝溢出的問題。
林:你從那裡知道的?
李:一個Troy Magennis的外國人發現的,你到這裡看看http://aspiring-technology.com/blogs/troym/archive/2006/10/06/24.aspx

十分鐘以後......

林:慘了!他重載的四個方法怎麼都有看不懂的呢?
李:所以平常才叫你把C#文法學好啊!現在都出3.5版本了!你說出來看看!
林貼了第一個代碼:

checked 
{
    foreach (int v in source) sum += v;
}

林:這個checked啥意思啊!
李:它是用來進行溢出檢查的,如果發生溢出就拋出異常。
林貼了第二個代碼:

public static long? LongSum(this IEnumerable<int?> source)

林:好端端的幹嗎在long後加個?好又在IEnumerable前加個this關鍵字
李:其實這裡long?是可空類型,也就是說返回的值可以為null。this在這裡是Linq的新特性,即擴充方法。

林貼了第三個代碼:

 public static long LongSum<T>(this IEnumerable<T> source, Func<T, int> selector)

林:這裡LongSum<T>啥意思?
李:泛型啊!你肯定上次逃課了,老師在課上說得很清楚。其實就是一個泛型方法,只是C#編譯器會在調用該方法的參數類型後辨別該方法的類型,所以不需要把泛型類賦予該方法。也就實現了泛型方法和普通方法一樣調用。
林:這個函數的參數為什麼這麼寫?
李:從它的簽名來看,由於參數前帶有this關鍵字,應該是一個擴充函數。第一個參數標示該參數是所有實現了泛型集合類。Func<T,int>其實就是一個泛型委派,它定義的是封裝一個具有一個參數並返回int參數指定的類型值的方法。

這時候的林奇才恍然大悟,慢慢的他才明白了老師課堂上提到的一個非常抽象的概念泛型。泛型除了有類以外還有方法、集合和委託。他心裏面覺得不好意思,準確的應該是很沒面子,於是他下定決心要把Linq這項技術掌握好!別在女友面前丟人!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.