程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 如何在集合類裡使用Find、FindAll與Sort

如何在集合類裡使用Find、FindAll與Sort

編輯:關於.NET

最近進行的開發中都是基於.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,我在此僅作為拋磚,期待大家引玉!!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved