Я реализовал IEquatable<T>
для сравнения объектов в двух списках, однако я хочу сделать это условно так:
public bool Equals(CustomerType other)
{
if (this.Zipcode == "11111" || this.Zipcode == "22222" || this.Zipcode== "33333")
{
return this.FirstName.Equals(other.FirstName) && this.LastName.Equals(other.LastName) && this.MiddleName.Equals(other.MiddleName);
}
else
{
return this.FirstName.Equals(other.FirstName);
}
}
Что-то здесь не так, и оно никогда не переходит в другое состояние. Может кто-нибудь сказать мне, где я иду не так?
- Использование -
var v = listA.Except (listB) .ToList ();
- реализация GetHashCode -
public override int GetHashCode()
{
unchecked
{
int hash = 17;
hash = hash * 23 + this.intField1.GetHashCode();
hash = hash * 23 + this.intField2.GetHashCode();
hash = hash * 23 + this.stringField3.GetHashCode();
hash = hash * 23 + this.doubleField4.GetHashCode();
hash = hash * 23 + this.doubleField5.GetHashCode();
return hash;
}
}
- Равно -
public override bool Equals(object obj)
{
if (obj == null) return base.Equals(obj);
if (obj is CustomerType )
{
return this.Equals((CustomerType)obj);
}
else
{
return false;
}
}
- Пример -
У ListA 2 клиента:
Cust1:
Имя - «А»
Фамилия - "Z"
MiddleName - "Y"
ZipCode - "11111"
Cust2:
FirstName - "B"
Фамилия - «Х»
MiddleName - "W"
ZipCode - "44444"
ListB имеет 2 клиентов:
Cust1:
Имя - «А»
Фамилия - "Z"
MiddleName - "Y"
ZipCode - "11111"
Cust2:
FirstName - "B"
Фамилия - "G"
MiddleName - "G"
ZipCode - "44444"
Здесь, когда я говорю ListA.Except (ListB), он должен сравнивать CustA с FirstName, MiddleName, LastName, поскольку он принадлежит Zipcode 11111 и CustB только с FirstName, и то же самое применяется, когда я говорю ListB.Except (ListA). В текущей реализации Equals происходит то, что она отлично работает с ListA.Except (ListB), но когда я говорю ListB.Except (ListA), она сравнивает FirstName, LastName и Middlename для CustB.