У меня есть список пользовательских объектов, где я пытаюсь удалить дубликаты записей.Я вижу так много онлайн-статей, которые указывают на IEqualityComparer
(я никогда не использовал это раньше).
Вопрос в том, когда мне его использовать?Я могу достичь того же результата с помощью LINQ
в одной строке кода.
Пример:
public static void Main(string[] args)
{
Product[] products =
{
new Product {Name = "apple", Code = 9},
new Product {Name = "orange", Code = 4},
new Product {Name = "apple", Code = 9},
new Product {Name = "lemon", Code = 12}
};
// Using Custom comparer
var usingCustomComparer = products.Distinct(new ProductComparer()).ToList();
// Using LINQ
var usinLinq = products.GroupBy(x => x.Name).Select(y => y.First()).ToList();
}
public class Product
{
public string Name { get; set; }
public int Code { get; set; }
}
// Custom comparer for the Product class
private class ProductComparer : IEqualityComparer<Product>
{
public bool Equals(Product x, Product y)
{
if (ReferenceEquals(x, y)) return true;
if (ReferenceEquals(x, null) || ReferenceEquals(y, null)) return false;
return x.Code == y.Code && x.Name == y.Name;
}
public int GetHashCode(Product product)
{
var hashProductName = product.Name == null ? 0 : product.Name.GetHashCode();
var hashProductCode = product.Code.GetHashCode();
return hashProductName ^ hashProductCode;
}
}
Результат от обоих:
{Name = "apple", Code = 9},
{Name = "orange", Code = 4},
{Name = "lemon", Code = 12}