C#-IComparable <T>和IEquatable <T>

use*_*546 3 c# generics

可能重复:
IComparable和IEquatable接口有什么区别?

IComparable<T>和之间的主要区别是IEquatable<T>什么?什么时候具体使用?

Eli*_*sha 9

IComparable的定义顺序(小于,大于).它定义的方法是CompareTo,您可以使用它来确定两个元素之间的顺序.

IEquatable定义了相等性.它定义的方法是Equals,它可以让你确定两个元素是否相等.

比较示例,按年龄排序Person:

public class Person : IComparable<Person>
{
    public int Age { get; set; }
    public int ID { get; set; }

    public int CompareTo(Person other)
    {

        return Math.Sign(Age - other.Age); // -1 other greater than this
                                           // 0 if same age
                                           // 1 if this greater than other
    }
}
Run Code Online (Sandbox Code Playgroud)

排序用法:

[Test]
public void SortTest()
{
    var persons = new List<Person>
                      {
                          new Person { Age = 0 },
                          new Person { Age = 2 },
                          new Person { Age = 1 }
                      };

    persons.Sort();

    Assert.AreEqual(0, persons[0].Age);
    Assert.AreEqual(1, persons[1].Age);
    Assert.AreEqual(2, persons[2].Age);
}
Run Code Online (Sandbox Code Playgroud)

通过ID识别Person的平等示例:

public class Person : IEquatable<Person>
{
    public int Age { get; set; }
    public int ID { get; set; }

    public bool Equals(Person other)
    {
        return ID == other.ID;
    }
}
Run Code Online (Sandbox Code Playgroud)