次の単純なクラスがあります
public class Person : IEquatable<Person>
{
public bool Equals(Person other)
{
return Name.Equals(other.Name, StringComparison.InvariantCultureIgnoreCase);
}
public override int GetHashCode()
{
return Name.GetHashCode();
}
public Person(string name)
{
Name = name;
}
public string Name { get; set; }
}
今、私は人物の配列を作成し、それらに対してdistinctを呼び出し、デフォルトのEquality Comparerを渡します。これはによって実装されたものですIEquatable<Person>
var persons = new[] {new Person("foo"), new Person("Foo"), new Person("bar"), new Person("Bar")};
persons.Distinct(EqualityComparer<Person>.Default);
識別された人物を検査すると、IEnumerable<Person>
が含まれていると予想されfoo, bar
ます。ただし内容はfoo, Foo, bar, Bar
結果でリストを初期化するとfoo, foo, bar, bar
、期待どおりになります。StringComparison.InvariantCultureIgnoreCase
そのため、Person.Equals
メソッド内が無視されているように思えます。
誰かアイデアはありますか?