.NET (四)委托第四讲:内置委托Comparison

时间:2023-12-14 15:49:44
// 摘要:
// 表示比较同一类型的两个对象的方法。
//
// 参数:
// x:
// 要比较的第一个对象。
//
// y:
// 要比较的第二个对象。
//
// 类型参数:
// T:
// 要比较的对象的类型。
//
// 返回结果:
// 一个有符号整数,指示 x 与 y 的相对值,如下表所示。 值 含义 小于 0 x 小于 y。 0 x 等于 y。 大于 0 x 大于 y。
public delegate int Comparison<in T>(T x, T y);

Comparison委托用于比较两个对象的大小。

    class Class4
{
public delegate int MyCompare(Customer a, Customer b);
static void Main1(String[] args)
{
Customer c1 = new Customer() { Name = "zhangsan", Age = };
Customer c2 = new Customer() { Name = "zhangsan", Age = };
Customer c3 = new Customer() { Name = "zhangsan", Age = };
Customer c4 = new Customer() { Name = "zhangsan", Age = };
Customer c5 = new Customer() { Name = "zhangsan", Age = };
List<Customer> list = new List<Customer>();
list.Add(c1);
list.Add(c2);
list.Add(c3);
list.Add(c4);
list.Add(c5); Comparison<Customer> comparesion = new Comparison<Customer>(Compare);
list.Sort(comparesion); ObjectDumper.Write(list); }
//比较两个对象大小
public static int Compare(Customer c1, Customer c2)
{
if (c1.Age > c2.Age)
{
return ;
}
else if(c1.Age==c2.Age)
{
return ;
}
else
{
return -;
}
}
} class Customer
{
public string Name { get; set; }
public int Age { get; set; }
}

List集合中的 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);

也可直接将方法传入:

list.Sort(Compare);

或者省略方法名:

list.Sort(delegate(Customer a, Customer b)
{
if (a.Age > b.Age)
{
return ;
}
else if (a.Age == b.Age)
{
return ;
}
else
{
return -;
}
});

Lamada:

//代码演进
list.Sort((Customer a, Customer b) =>
{
if (a.Age > b.Age)
{
return ;
}
else if (a.Age == b.Age)
{
return ;
}
else
{
return -;
}
});