Построение на других ответах, создание универсального компаратора было тем, которое я любил больше всего. Но я получил проблему с Linq Enumerable.Union
( MSDN ссылка .NET ), который был, что ее использование GetHashCode непосредственно, не принимая во внимание Равняется переопределению.
, Который взял меня для реализации Компаратора как:
public class Comparer<T> : IEqualityComparer<T>
{
private readonly Func<T, int> _hashFunction;
public Comparer(Func<T, int> hashFunction)
{
_hashFunction = hashFunction;
}
public bool Equals(T first, T second)
{
return _hashFunction(first) == _hashFunction(second);
}
public int GetHashCode(T value)
{
return _hashFunction(value);
}
}
Используя его как это:
list.Union(otherList, new Comparer<T>( x => x.StringValue.GetHashCode()));
Примечание, что сравнение могло бы дать некоторую ложь, положительную начиная со сравниваемой информации, отображается на int
значение.