У меня есть следующий простой объект:IEqualityComparer <T> не работает со списком <T> .distinct() метод
public class Net : IEqualityComparer<Net>
{
public string Name { get; private set; }
public int Id { get; set; }
private Gate _inGate;
private Gate _outGate;
private NetValue _value = NetValue.NotSet;
private bool _isMiddleNet;
//constructor and stuff!!!.....
//Equality comparer
public bool Equals(Net x, Net y)
{
return (x.Id == y.Id && x.Name == y.Name);
}
public int GetHashCode(Net obj)
{
return obj.Id.GetHashCode()^obj.Name.GetHashCode();
}
public override int GetHashCode()
{
return 13 * Id.GetHashCode() + 7 * Name.GetHashCode();
}
Поэтому в основном я заинтересован, чтобы сказать 2 экземпляра этого объекта равны тогда и только тогда, когда их Id
и Name
члены равны ...
Но где-то в другом классе я должен List<Net>
, и я хочу, чтобы выполнить различие в этих списках:
inputNetsA = inputNetsA.Distinct().ToList();
inputNetsB = inputNetsB.Distinct().ToList();
Но это не работает так, как никогда! Что я делаю не так?
Сторона q: почему 2 реализации GetHashCode настолько различны в вашем образце? А где реализация 'object.Equals'? См. Http://stackoverflow.com/questions/4095395/whats-the-role-of-gethashcode-in-the-iequalitycomparert-in-net и связанные вопросы для информации ... –