Я реализую IEquatable в пользовательском классе, который имеет список <T>
в качестве свойства, например:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public List<string> Dislikes;
public bool Equals(Person p)
{
if (p == null)
{
return false;
}
if (object.ReferenceEquals(this, p))
{
return true;
}
return this.FirstName == p.FirstName
&& this.LastName == p.LastName
&& this.Dislikes == p.Dislikes; //or this.Dislikes.Equals(p.Dislikes)
}
public override int GetHashCode()
{
int hash = 17;
hash = hash * 23 + (this.FirstName ?? String.Empty).GetHashCode();
hash = hash * 23 + (this.LastName ?? String.Empty).GetHashCode();
hash = hash * 23 + this.Dislikes.GetHashCode();
return hash;
}
}
Меня беспокоит Список, когда я пытаюсь реализовать методы Equals и GetHashCode. В частности, будет ли List <T>
.Equals оценивать равенство его содержимого? Аналогично для списка <T>
.GetHashCode?