集合内的比较和排序
更新:2007 年 11 月
System.Collections 类在涉及管理集合的几乎所有进程中执行比较,无论是搜索要移除的元素还是返回键值对的值。
有两个构造用于比较。Equals 方法(从 Object 继承或派生的)只返回指示两个对象是否相等的布尔值。IComparable.CompareTo 方法和 IComparer.Compare 方法返回一个整数,该整数指示两个值如何相互进行比较。Equals 用于相等检查;IComparable.CompareTo 和 IComparer.Compare 方法以及它们在泛型类上的对应方法(IComparer<T>.Compare 和 IComparable<T>.CompareTo 方法)用于排序。
这些比较可以在集合中的两个元素之间进行,也可以在一个元素和一个指定的值之间进行。在未显式指定比较器时,所比较的对象中至少有一个应实现 IComparable 接口,并且能够将自身与其他对象进行比较。
某些类具有将 IComparer 实现作为参数接受的方法。在使用那些方法并且 IComparer 参数不为空引用时(在 Visual Basic 中为 Nothing),不要求所比较的对象亲自实现 IComparable。不过,好的做法是在所有可用作列表集合中的值或字典集合中的键的类上实现 IComparable。
字典集合的某些构造函数重载接受 IComparer 实现,该实现用于按需比较各键。Array 中 Sort 方法的重载可接受 IComparer 实现,该实现仅用于专门调用 Sort 方法。
系统当前的区域性设置会影响集合内的比较和排序。默认情况下,Collections 类内的比较和排序是区分区域性的。若要忽略区域性设置并由此获得一致的比较和排序结果,请使用包含接受 CultureInfo 的成员重载的 InvariantCulture。有关更多信息,请参见在集合中执行不区分区域性的字符串操作和在数组中执行不区分区域性的字符串操作。