C# 返回int类型的内置委托—Comparison
MSDN给出的定义:表示比较同一类型的两个对象的方法。
它的定义也很简单:
public delegate int Comparison<in T>(T x, T y)
T是要比较的对象的类型,而返回值是一个有符号整数,指示 x 与 y 的相对值,如下表所示:
值 |
含义 |
---|---|
小于 0 |
x 小于 y。 |
0 |
x 等于 y。 |
大于 0 |
x 大于 y。 |
此委托由 Array 类的 Sort<T>(T[], Comparison<T>) 方法重载和 List<T> 类的 Sort(Comparison<T>) 方法重载使用,用于对数组或列表中的元素进行排序。
4.2 深入Comparison
由于Comparison委托常用于在集合中进行排序,那么我们就来看看如何使用Comparison委托来进行元素的排序。于是,我们将目光转到List集合的Sort方法,相信大部分童鞋也都用过这个方法。
(1)老惯例,还是先看看Sort方法的定义:
// // 摘要: // 使用指定的 System.Comparison<T> 对整个 System.Collections.Generic.List<T> 中的元素进行排序。 // // 参数: // comparison: // 比较元素时要使用的 System.Comparison<T>。 // // 异常: // System.ArgumentNullException: // comparison 为 null。 // // System.ArgumentException: // 在排序过程中,comparison 的实现会导致错误。 例如,将某个项与其自身进行比较时,comparison 可能不返回 0。 public void Sort(Comparison<T> comparison);
(2)再来看看Sort方法的实现:
可以看出,这里虽然使用Comparison委托但最终还是转换成了Comparer比较器,再次调用重载的Array.Sort静态方法进行排序。
(3)现在我们来用一下Comparison委托:还是以那个PersonList集合为例,假如我们要以Age为条件进行降序排列,我们应该怎么来写这个委托呢?
List<Person> personList = GetPersonList(); personList.Sort(delegate(Person p1, Person p2) { return p2.Age - p1.Age; }); personList.ForEach(delegate(Person p) { Console.WriteLine(p.ID + "-" + p.Name + "-" + p.Age); });
实现的效果如下图所示:
那么,如果是要进行升序排列呢?只需要改一下:return p2.Age-p1.Age; 更改一下被减数和减数的位置,即可完成升序和降序的切换。
personList.Sort(delegate(Person p1, Person p2) { return p1.Age - p2.Age; });
出处:http://edisonchou.cnblogs.com