internal class CustomerEqualityComparer<T> : IEqualityComparer<T>
{
public CustomerEqualityComparer(params Func<T, object>[] selectors)
{
Selectors = selectors;
}
private IEnumerable<Func<T, object>> Selectors { get; }
public bool Equals(T left, T right)
{
return !ReferenceEquals(left, null) && !ReferenceEquals(right, null) &&
Selectors.All(selector => selector(left).Equals(selector(right)));
}
public int GetHashCode(T obj)
{
unchecked
{
return Selectors.Select(selector => selector(obj).GetHashCode())
.Aggregate(17, (hashCode, subHashCode) => hashCode * 31 + subHashCode);
}
}
}
{
public CustomerEqualityComparer(params Func<T, object>[] selectors)
{
Selectors = selectors;
}
private IEnumerable<Func<T, object>> Selectors { get; }
public bool Equals(T left, T right)
{
return !ReferenceEquals(left, null) && !ReferenceEquals(right, null) &&
Selectors.All(selector => selector(left).Equals(selector(right)));
}
public int GetHashCode(T obj)
{
unchecked
{
return Selectors.Select(selector => selector(obj).GetHashCode())
.Aggregate(17, (hashCode, subHashCode) => hashCode * 31 + subHashCode);
}
}
}