fooInstance1.fooField1 = 5;
fooInstance1.fooField2 = 5;
Вы дважды обновили fooInstance1
.Вторая строка должна сказать fooInstance2.fooField1 = 5;
.
Как только это исправлено, Q.Contains
возвращает True
, как и ожидалось.
Кроме этого, вам необязательно реализовывать
IEquatable
.Каждый объект имеет переопределяемый метод
Equals
.Вы можете просто перезаписать это.Будьте осторожны, когда реализуете свой собственный метод сравнения.Ваша реализация, показанная в этом примере, очень открыта для исключений NullReference.Примерно так будет лучше:
public override bool Equals(object obj)
{
if(obj == null)
return false;
Foo other = obj as Foo;
if(other == null)
return false;
return fooField1 == other.fooField1;
}
Как уже упоминали другие, если вы идете по этому маршруту и переопределяете Equals
, вы должны переопределить и GetHashCode
.Есть несколько других вещей, которые вы должны рассмотреть.Подробнее см. на этой странице MSDN .