最近進行的開發中都是基於.NET 2.0,.NET 2.0雖然很經典,但是用慣了LINQ與Lambda,現在才知道LINQ 與Lambda是多麼的強大,多麼的大快人心,特別對於集合類。
我原以為在2.0時代,對於集合類我們只 能去寫循環對其篩選或排序等等,真是見識太短淺了。
OK,廢話少扯,進入正題。第一個分享的代碼是 Find方法,其參數為一個委托,微軟已經為我們定義好這個委托,直接使用即可。(如果對委托不了解,可以 谷歌下,或者參照不才之作 http://www.cnblogs.com/FreeDong/archive/2012/09/27/2705372.html 做C#開 發如果懂得使用委托和事件將會讓咱們的編碼世界更加豐富與有趣),好了貼上我寫的一個方法的代碼:
/// <summary> /// 方法說明:是否包含該菜單名 /// 作 者:梁文東 /// 創建時間:2012-12-14 /// </summary> /// <param name="key">The key.</param> /// <returns>返回是否包含該菜單名</returns> public bool CantainKey(string key) { return this.MenuEdits.Find(new Predicate<MenuEditEntity>(delegate (MenuEditEntity entity) { return entity.MenuKey == key; })) != null; }
該方法中this.MenuEdits為類的成員,類型為 List<MenuEditEntity>,我在這裡 邊直接使用了匿名委托,以下亦是,該委托返回的是bool類型,即為我們要篩選的條件。
接下來到 FindAll方法,但是,我就不貼代碼了,用法與Find類似,只不過它返回的是符合條件的集合對象,而不是只 返回第一個。
然後到Sort方法,這個有點麻煩,先看代碼。
list.Sort(new Comparison<BaseEditor>(delegate(BaseEditor model1, BaseEditor model2) { if (model1.TabIndex == model2.TabIndex) { return 0; } else if (model1.TabIndex < model2.TabIndex) { return -1; } else { return 1; } }));
同樣的list的類型為List<BaseEditor>,而BaseEditor為自定義控件 (控件肯定要包含TabIndex屬性啦,呵呵),我在這裡面獲取一個窗體裡面所有的控件,然後想讓這些控件按 照TabIndex進行排序,這個做窗體開發用到的也不少啊。然後有一點不同的是Sort方法沒有返回值,直接對 list進行排序了。
最後這個委托有點難理解,這裡邊返回值只有-1、0、1,其他返回值對排序無影響 ,返回0與-1則兩個對比的對象不調順序,若返回1則需調,如上,
model1.TabIndex > model2.TabIndex 則表明model1應該排在model2之後,依次類推。
當然上述還有其他用途更廣的重載,大 家具體可參見MSDN,我在此僅作為拋磚,期待大家引玉!!