我有以下简单的课程
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 并传递默认的平等比较器,这是由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
方法中被忽略了。
有人有想法吗?