读书人

IEqualityComparer 接口的应用

发布时间: 2012-11-22 00:16:41 作者: rapoo

IEqualityComparer 接口的使用

先给出MSDN关于IEqualityComparer 接口的介绍,点击打开链接,IEqualityComparer主要适用于IEqualityComparer 接口的应用IEqualityComparer 接口的应用EqualsIEqualityComparer 接口的应用IEqualityComparer 接口的应用GetHashCode public class SellerTypeIdentify { /// <summary> /// 商户类型ID /// </summary> public string SellerTypeID { get; set; } public string SellerName { get; set; } }


定义一个以SellerTypeID为基础的比较器

  public class SellerTypeIdentifyComparer : IEqualityComparer<SellerTypeIdentify>        {            // SellerType are equal if their names and product numbers are equal.            public bool Equals(SellerTypeIdentify x, SellerTypeIdentify y)            {                //Check whether the compared objects reference the same data.                if (Object.ReferenceEquals(x, y)) return true;                if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))                    return false;                return x.SellerTypeID == y.SellerTypeID;            }            public int GetHashCode(SellerTypeIdentify product)            {                //Check whether the object is null                 if (Object.ReferenceEquals(product, null)) return 0;                //Get hash code for the SellerTypeID field if it is not null.                 int SellerTypeId = product.SellerTypeID == null ? 0 : product.SellerTypeID.GetHashCode();                //Calculate the hash code for the SellerType.                 return SellerTypeId;            }        }

初始化数据

public static List<SellerTypeIdentify> GetMainData()        {            List<SellerTypeIdentify> sellerTypeList = new List<SellerTypeIdentify>();            sellerTypeList.Add(new SellerTypeIdentify { SellerTypeID = "00000001", SellerName = "Name0001" });            sellerTypeList.Add(new SellerTypeIdentify { SellerTypeID = "00000002", SellerName = "Name0002" });            sellerTypeList.Add(new SellerTypeIdentify { SellerTypeID = "00000003", SellerName = "Name0003" });            return sellerTypeList;        }        public static List<SellerTypeIdentify> GetSuppData()        {            List<SellerTypeIdentify> sellerTypeList = new List<SellerTypeIdentify>();            sellerTypeList.Add(new SellerTypeIdentify { SellerTypeID = "00000002", SellerName = "Name0001" });            sellerTypeList.Add(new SellerTypeIdentify { SellerTypeID = "00000001", SellerName = "Name0002" });            sellerTypeList.Add(new SellerTypeIdentify { SellerTypeID = "00000003", SellerName = "Name0003" });            sellerTypeList.Add(new SellerTypeIdentify { SellerTypeID = "00000004", SellerName = "Name0004" });            return sellerTypeList;        }


就拿Distinct和SequenceEqual来说

 List<SellerTypeIdentify> sellerTypeMainList = new List<SellerTypeIdentify>();            sellerTypeMainList = Program.GetMainData();            List<SellerTypeIdentify> sellerTypeSuppList = new List<SellerTypeIdentify>();            sellerTypeSuppList = Program.GetSuppData();            int mainSellerCount = sellerTypeMainList.Distinct(new SellerTypeIdentifyComparer()).Count();            int suppSellerCount = sellerTypeSuppList.Distinct(new SellerTypeIdentifyComparer()).Count();            List<bool> xquery = new List<bool>();            if (suppSellerCount <= mainSellerCount)            {                foreach (SellerTypeIdentify s in sellerTypeSuppList.Distinct(new SellerTypeIdentifyComparer()).OrderBy(x => x.SellerTypeID))                {                    xquery.Add(sellerTypeMainList.OrderBy(x => x.SellerTypeID).Contains(s, new SellerTypeIdentifyComparer()));                }            }            else            {                Console.WriteLine("NOT CONTAINS1");            }            if (xquery.Contains(false))            {                Console.WriteLine("NOT CONTAINS2");            }            bool IsEqual = sellerTypeMainList.OrderBy(x => x.SellerTypeID).SequenceEqual(sellerTypeSuppList.OrderBy(x => x.SellerTypeID), new SellerTypeIdentifyComparer());            if (IsEqual)            {                Console.WriteLine("Equal");            }            else            {                Console.WriteLine("Not Equal");            }


输出结果如下:

IEqualityComparer 接口的应用


1楼slightsmiling5天前 22:45
不错

读书人网 >编程

热点推荐