在開發稱重軟件過程中用到了各種各樣的技術框架和概念個人接觸比較多點的還是List<T> 了也比較感興趣畢中的List<T>非常方便但是很遺憾是沒有自帶更方便的一些排序查找之類的函數很多都得我們自己寫函數這非常的麻煩其實這些方法想要的只是一個一句話的delegate而已下面主要討論三個方法List<T>Sort();List<T>Find();List<T>Exist();
首先看List<T>Sort()其定義是public void Sort( Comparison<T> comparison );要求傳入的參數是Comparison<T> comparison那就看看Comparison<T> comparison 要求我們傳入哪些參數以及返回什麼樣的值查閱MSDN後我們發現Comparison<T> 要求我們傳入兩個T的示例即t和t返回結果是整數如果t<t返回如果相等返回如果t>t返回和字符串比較的返回方式一樣於是我們可以這樣設計delegate:listVideoItemsSort(delegate(VideoItem v VideoItem v) { return Comparer<string>DefaultCompare(vTitle vTitle); });
上面的代碼是對實體的Title屬性進行排序采用字符串比較的返回值作為delegate的返回值
接下來我們看看List<T>Find()和List<T>Exist()
Find()的定義如下public T Find( Predicate<T> match )
Exist也類似public bool Exists( Predicate<T> match )
所以只要我們設計好Predicate<T> match 這個參數的delegateFind()和Exists()這兩個函數我們都可以用了查詢MSDN發現Predicate<T> 要求我們傳入一個T的實體並返回這個T是不是存在的布爾結果因此我們就可以寫出VideoItem video= listVideoItemsFind(delegate(VideoItem v) { return vTitle== xxxxx; }) 這代碼表示按照標題查找實體當然xxxxx可以替換成變量和硬代碼vTitle == xxxxx 這種方式也可以改為 vMinutes > 或其他只要能返回布爾結果即可
同樣的delegate也可以用在Exists()中
bool flag= listVideoItemsExists(delegate(VideoItem v) { return vMinutes > ;})
最後List<T>當中還有一個非常好用的FindAll()方法也相當好用相信看完本文的朋友馬上就能寫出delegate來
From:http://tw.wingwit.com/Article/program/net/201311/12211.html