在逆向变换的msdn页面上,我找到了一个非常有趣的例子,显示了"IComparer逆变的好处"
首先,他们使用相当奇怪的基础和派生类:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Employee : Person { }
Run Code Online (Sandbox Code Playgroud)
我已经可以说它是一个糟糕的例子,因为没有类只是继承一个基类而不至少添加一些自己的东西.
然后他们创建一个简单的IEqualityComparer类
class PersonComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
..
}
public int GetHashCode(Person person)
{
..
}
}
Run Code Online (Sandbox Code Playgroud)
接下来是有问题的例子.
List<Employee> employees = new List<Employee> {
new Employee() {FirstName = "Michael", LastName = "Alexander"},
new Employee() {FirstName = "Jeff", LastName = "Price"}
};
IEnumerable<Employee> noduplicates …Run Code Online (Sandbox Code Playgroud)