参照型の一意の値を取得するには、HashSetを使用してIEqualityComparerを実装する必要がありますが、SortedSetもHashSetで実装する必要はありません。 例を示します。私はそれが私がEmployeeComparerがされたIEqualityComparerを実装している場合にのみ動作しますが、私はにSortedSetを使用している場合、それは私に一意の値を与える名前に基づいて独自の従業員を取得するためのHashSetを使用する必要がある場合SortedSetがIEqualitycomparerを使用せずに一意の出力を与える方法
public class Employee
{
public string Name { get; set; }
public int Age { get; set; }
}
public class EmployeeComparer : IEqualityComparer<Employee>, IComparer<Employee>
{
public bool Equals(Employee x, Employee y)
{
return string.Equals(x.Name, y.Name);
}
public int GetHashCode(Employee obj)
{
return obj.Name.GetHashCode();
}
public int Compare(Employee x, Employee y)
{
return string.Compare(x.Name, y.Name);
}
}
- 私たちは以下のEmployeeクラスとEmployeeComparerクラスを考えてみましょうEmployeeComparerクラスがIEqualityComparerとIComparerだけを実装していなくても、ここで一意性のためにGetHashCode()とEquals()メソッドを提供する必要はありますか?
string.Compareはオブジェクトを比較するための要件であるHashCode比較の要件を内部的に満たしていますか? – LearnAndShare
@ LearnAndShareいいえ、ハッシュコードはオブジェクトを比較するための要件ではありません。 '.Compare()'はオブジェクトの比較に十分です。 – JLRishe