У меня есть класс, который я сделал осуществить IEquatable<T>
так, что, когда я тестирую я могу легко сравнить IEnumerable
коллекции этих объектов с помощью вызова, таких как:тестирование Коллекция объектов по вопросам равенства с помощью IEquatable <T>
Assert.IsTrue(expected.SequenceEqual(actual));
В настоящее время это работает хорошо, но у меня есть несколько сомнительных сомнений. Класс выглядит следующим образом:
public class ThirdPartyClaim : IEquatable<ThirdPartyClaim>
{
// fields removed for question
public bool Equals(ThirdPartyClaim compareTo)
{
if (object.ReferenceEquals(this, compareTo))
{
return true;
}
return this.ClaimId.Equals(compareTo.ClaimId) &&
this.Firstname.Equals(compareTo.Firstname) &&
this.Lastname.Equals(compareTo.Lastname);
}
public override int GetHashCode()
{
int hashClaimId = this.ClaimId == null ? 0 : this.ClaimId.GetHashCode();
int hashFirstname = this.Firstname == null ? 0 : this.Firstname.GetHashCode();
int hashLastname = this.Lastname == null ? 0 : this.Lastname.GetHashCode();
return hashClaimId^hashFirstname^hashLastname;
}
Мое понимание перекрывая GetHashCode()
является то, что она используется для сравнения объектов, указывающих на тот же экземпляр класса. Очень маловероятно, что это потребуется по этому поводу (даже в будущем).
Правильно ли это понимание, и если да, могу ли я безопасно удалить код?
Есть ли лучший способ сравнить коллекции этих объектов в моем модульном тесте?
Хотя я ограничен, чтобы использовать MSTest.
Thans
Нет, 'GetHashCode()' используется для вычисления хэш-кода для любого экземпляра. Любые поля, используемые в реализации 'Equals', также должны использоваться при вычислении хэш-кода. –