我有以下簡單的類LINQ鮮明的工作不正常
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; }
}
現在我創造者的數組,呼籲他們不同,並通過默認的相等比較,這是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
被忽略。
有沒有人有想法?
其他一些言論(你的問題已經被解決的答案)。你應該考慮在'Equals'中檢查'other'的'other'。由於'Person'可能來自(它不是''sealed'類),因此還可以考慮說'if(GetType()!= other.GetType()){return false; }'。請注意,您的對象是可變的(在構造對象後'Name'可以更改),並且可變對象包含在字典或散列集中時不應該發生變異。通過saynig'return obj as Person;'覆蓋虛擬Object.Equals(object obj)'。 – 2012-08-06 21:28:36