IEqualityComparer 接口的使用
先给出MSDN关于IEqualityComparer 接口的介绍,点击打开链接,IEqualityComparer主要适用于




定义一个以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"); }
输出结果如下:
- 1楼slightsmiling5天前 22:45
- 不错