1. 程式人生 > >c# distinct自定義重寫方法

c# distinct自定義重寫方法

現在有一個類定義如下

public class CreateTestUnitSrvInputCollection 

{

        private int mParentId;
        /// <summary>
        /// 所屬構建標籤ID/或資料夾ID
        /// </summary>
        public int ParentId
        {
            get
            {
                return mParentId;
            }
            set
            {
                mParentId = value;
            }
        }


        private int mParentType;
        /// <summary>
        /// 所屬父類的檔案型別   2資料夾 1構建標籤
        /// </summary>
        public int ParentType
        {
            get
            {
                return mParentType;
            }
            set
            {
                mParentType = value;
            }
        }

  }

現在有一個List<CreateTestUnitSrvInputCollection > 其中裡面有一些資料是相同的(即其中ParentId和ParentType的值都相同)

那麼這個時候你如果呼叫distinct的方法話 是去除不掉這些相同項的 因為在c#中例項化一個類 類是引用型別 所以每

個類都不相同

所以這個時候 如果你想自定義去除相同項的話 那就要繼續IEqualityComparer介面

實現程式碼如下

public class CreateTestUnitSrvInputCollection : System.Collections.Generic.IEqualityComparer<CreateTestUnitSrvInputCollection>

  {

        private int mParentId;
        /// <summary>
        /// 所屬構建標籤ID/或資料夾ID
        /// </summary>
        public int ParentId
        {
            get
            {
                return mParentId;
            }
            set
            {
                mParentId = value;
            }
        }


        private int mParentType;
        /// <summary>
        /// 所屬父類的檔案型別   2資料夾 1構建標籤
        /// </summary>
        public int ParentType
        {
            get
            {
                return mParentType;
            }
            set
            {
                mParentType = value;
            }
        }

      #region IEqualityComparer<CreateTestUnitSrvInputCollection> 成員

        public bool Equals(CreateTestUnitSrvInputCollection x, CreateTestUnitSrvInputCollection y)
        {

        //這個地方就是定義判斷什麼情況下是相同的元素程式碼 如果你就是想通過一個欄位去判斷 那麼就用一個 這個就行x.ParentId==y.ParentId
            return x.ParentId==y.ParentId&&x.ParentType==y.ParentType;
        }

        public int GetHashCode(CreateTestUnitSrvInputCollection obj)
        {
            return 0;
        }

        #endregion

  }

以上就可以自定義distinct自己想過濾的元素