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自己想过滤的元素