// 摘要:
// 表示比较同一类型的两个对象的方法。
//
// 参数:
// 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 -;
}
});

.NET (四)委托第四讲:内置委托Comparison的更多相关文章

  1. .NET (三)委托第三讲:内置委托Action

    .NET 为我们提供了无返回值的内置委托 Action,代码如下: // 摘要: // 封装一个方法,该方法只有一个参数并且不返回值. // // 参数: // obj: // 此委托封装的方法的参数 ...

  2. .NET (五)委托第五讲:内置委托Predicate

    // 摘要: // 表示定义一组条件并确定指定对象是否符合这些条件的方法. // // 参数: // obj: // 要按照由此委托表示的方法中定义的条件进行比较的对象. // // 类型参数: // ...

  3. C#常用的内置委托

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  4. asp。net内置委托

    Action与Func是APS.NET内置委托 //--------------无返回值的委托Action--------------------------- Action是无返回值的泛型委托 Ac ...

  5. 委托+内置委托方法+多播委托+lambda表达式+事件

    委托概念:如果我们要把方法当做参数来传递的话,就要用到委托.简单来说委托是一个类型,这个类型可以赋值一个方法的引用. 声明委托: 在C#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字 ...

  6. C#内置委托类型Func和Action对比及用法

    C#的内置委托类型 Func Action 返回值 有(只有一个Tresult) 无 重载 17个(0参-16参) 17个(0参-16参) 泛型 支持 支持 系统内置 是 是 是否需要声明 否 否 c ...

  7. Python【第四篇】函数、内置函数、递归、装饰器、生成器和迭代器

    一.函数 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 1.定义 def 函数名(参数): ...

  8. .NET (二)委托第二讲:内置委托Func

    在上一章节中,我们自己声明了一个委托: public delegate bool Cal(int num); 接受int参数,返回bool类型,目的是过滤集合中的 奇数 或者 偶数. .NET 为我们 ...

  9. c#中内置委托

    一.Action泛型委托 和之前委托最大区别在于不用定义委托,直接实例化委托(申明就可以),泛型其实就是选择数据类型,进行使得程序更加安全,并且也实现了委托的重载,最多选择16个参数. namespa ...

随机推荐

  1. mysql 基础列题

    1:emp表中查询公司总共有几个部门注意,会查询出来大量重复的,使用函数distinctselect distinct job from scott.emp; 2:查询公司工资在1000-3000之间 ...

  2. PHP list,explode的使用

    PHP list,explode的使用 <?php header("Content-type: text/html; charset=utf-8"); echo " ...

  3. virtualbox 使用USB引导启动安装系统

    想要测试u盘系统引导有没有问题,从u盘中启动我烧录的Android x86系统. 这种方式可以在已有空的虚拟机上直接启动U盘中的系统. 百度上能搜到的方式都是使用CMD命令(懒人表示太麻烦--),so ...

  4. 查看Visual Studio异常内容

    If Entity Framework throws a validation exception when saving, Visual Studio reports the message, Va ...

  5. Linux的Service/Daemon你真的懂了吗?

    一 service与一般的程序的区别 service(也称为daemon)表示后台运行的程序,一般随系统的启动自动地启动且在用户logoff后仍然能够继续运行.该daemon进程一般在启动后需要与父进 ...

  6. 获取小众ftp服务器指定目录内容列表

    今天获取小众ftp服务器指定目录内容列表时费劲急了. ///parama url="ftp://x.x.x.x/dir_name" public string GetFTPDir( ...

  7. 数据库schema设计与优化

    原文地址 1. 前言 对于数据库而言,在日常开发中我们主要的关注点有两块,一个是schema的结构设计,另一个就是索引的优化,这两块是影响我们最终系统结构和性能的关键部分,自然也是我们花费精力最多的部 ...

  8. 本地新建项目提交到github

    1.在github上创建项目(可以添加README.md),创建后的地址为 https://github.com/xxx/xxx-demo.git 2.在eclipse上新建个quick-start的 ...

  9. WKWebview 拼接tableview,获取web内容高度

    - (void)addWKWebView { _webView = [[WKWebView alloc] initWithFrame:CGRectMake(, , SCREEN_WIDTH, 0.1) ...

  10. 基于hadoop的数据仓库工具:Hive概述

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行.其优点是学习成本低,可以通过类 ...