เนื่องจากเรากำลังพูดถึงการมีทุกองค์ประกอบในครั้งเดียว "ชุด" จึงเหมาะสมกับฉันมากกว่า
ตัวอย่างกับคลาสและ IEqualityComparer ดำเนินการ:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public Product(int x, string y)
{
Id = x;
Name = y;
}
}
public class ProductCompare : IEqualityComparer<Product>
{
public bool Equals(Product x, Product y)
{
if (Object.ReferenceEquals(x, y)) return true;
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;
return x.Id == y.Id && x.Name == y.Name;
}
public int GetHashCode(Product product)
{
if (Object.ReferenceEquals(product, null)) return 0;
int hashProductName = product.Name == null ? 0 : product.Name.GetHashCode();
int hashProductCode = product.Id.GetHashCode();
return hashProductName ^ hashProductCode;
}
}
ตอนนี้
List<Product> originalList = new List<Product> {new Product(1, "ad"), new Product(1, "ad")};
var setList = new HashSet<Product>(originalList, new ProductCompare()).ToList();
setList
จะมีองค์ประกอบที่เป็นเอกลักษณ์
ฉันคิดถึงสิ่งนี้ในขณะที่จัดการกับ.Except()
สิ่งที่ส่งคืนผลต่างเซต