【发布时间】:2016-06-23 04:02:24
【问题描述】:
在高层次上获取引用类型的唯一值需要使用 HashSet 实现 IEqualityComparer,但使用 HashSet 的 SortedSet 似乎不需要它。 这是一个例子。假设我们在下面有 Employee 类和 EmployeeComparer 类 -
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);
}
}
如果我必须使用 HashSet 根据名称获取唯一的员工,它只有在我有实现 IEqualityComparer 的 EmployeeComparer 时才有效,但如果我使用 SortedSet,即使类 EmployeeComparer 没有实现 IEqualityComparer 而只是 IComparer,它也会给我唯一的值。此处要求提供 GetHashCode() 和 Equals() 方法的唯一性会发生什么?
【问题讨论】: