Karena kita berbicara tentang memiliki setiap elemen tepat satu kali, "set" lebih masuk akal bagi saya.
Contoh dengan penerapan kelas dan 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;
}
}
Sekarang
List<Product> originalList = new List<Product> {new Product(1, "ad"), new Product(1, "ad")};
var setList = new HashSet<Product>(originalList, new ProductCompare()).ToList();
setList
akan memiliki elemen unik
Saya memikirkan hal ini saat berurusan dengan .Except()
yang mengembalikan perbedaan-set