using System.Collections.Generic;
public string Name { get; set; }
public int Code { get; set; }
class ProductComparer : 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 x.Code == y.Code && 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.Code.GetHashCode();
return hashProductName ^ hashProductCode;
public static void Main()
Product[] store1 = { new Product { Name = "apple", Code = 9 },
new Product { Name = "orange", Code = 4 },
new Product { Name = "orange", Code = 5 },
new Product { Name = "orange", Code = 6 },
new Product { Name = "orange", Code = 7 },
new Product { Name = "orange", Code = 8 },
new Product { Name = "orange", Code = 9 }};
Product[] store2 = { new Product { Name = "apple", Code = 9 } };
IEnumerable<Product> duplicates =
store2.Intersect(store1, new ProductComparer());
foreach (var product in duplicates)
Console.WriteLine(product.Name + " " + product.Code);