在C#中,IComparable
是一个核心接口,用于定义对象的自然排序规则。实现该接口的类可以指定其实例如何与其他实例比较大小,从而支持排序操作(如 Array.Sort()
、List.Sort()
).
1. 该接口CompareTo返回值含义:
-1
:当前对象 小于 比较对象(应排在前面)。
0
:两对象 相等。
1:当前对象 大于 比较对象(应排在后面)
2.实际应用场景
对集合调用 Sort()
时自动生效。
在 SortedList
、SortedDictionary
等有序容器中使用。
为LINQ的 OrderBy()
提供基础比较能力。
一、实际例子如下:
using System;
using System.Collections.Generic;
public class Person : IComparable<Person>
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age)
{
Name = name;
Age = age;
}
// 实现 CompareTo 方法(按年龄排序)
public int CompareTo(Person? other)
{
if (other == null) return 1; // null视为最小
return Age.CompareTo(other.Age); // 使用int的CompareTo方法
}
public override string ToString() => $"{Name} ({Age})";
}
class Program
{
static void Main()
{
var people = new List<Person>
{
new Person("Alice", 25),
new Person("Bob", 20),
new Person("Charlie", 30)
};
// 排序(依赖IComparable的实现)
people.Sort();
foreach (var person in people)
{
Console.WriteLine(person); // 输出按年龄升序
}
}
}
上例中输出:可见按照年龄进行了升序排列: Bob (20) Alice (25) Charlie (30)