// 摘要:
// 表示定义一组条件并确定指定对象是否符合这些条件的方法。
//
// 参数:
// obj:
// 要按照由此委托表示的方法中定义的条件进行比较的对象。
//
// 类型参数:
// T:
// 要比较的对象的类型。
//
// 返回结果:
// 如果 obj 符合由此委托表示的方法中定义的条件,则为 true;否则为 false。
public delegate bool Predicate<in T>(T obj);

Predicate委托根据条件进行筛选,返回 是 或 否。

下面筛选客户名称,查询出以字母z开头的客户:

   class Class5
{
static void Main(String[] args)
{
Customer c1 = new Customer() { Name = "zhangsan", Age = };
Customer c2 = new Customer() { Name = "lisi", Age = };
Customer c3 = new Customer() { Name = "wangwu", Age = };
Customer c4 = new Customer() { Name = "xiaoming", Age = };
Customer c5 = new Customer() { Name = "zhangchao", Age = };
List<Customer> list = new List<Customer>();
list.Add(c1);
list.Add(c2);
list.Add(c3);
list.Add(c4);
list.Add(c5); Predicate<Customer> predicate = new Predicate<Customer>(Choose);
List<Customer> query = list.FindAll(predicate); ObjectDumper.Write(query); } public static bool Choose(Customer c)
{
if (c.Name.StartsWith("z"))
{
return true;
}
return false; }
}

List集合中的findAll方法接受一个Predicate委托类型。

匿名委托:

            //代码演进
List<Customer> query = list.FindAll(delegate(Customer c)
{
if (c.Name.StartsWith("z"))
{
return true;
}
return false;
});

Lamada:

            List<Customer> query = list.FindAll((Customer c)=>
{
if (c.Name.StartsWith("z"))
{
return true;
}
return false;
});

总结:委托定义的是方法的类型。返回值和参数必须与方法相同。

.NET 为我们定义了4大内置委托,他们是:

Action:无返回值

Func: 有返回值

Comparison:返回整数,比较两个对象

Predicate:返回bool ,根据条件筛选

委托可以将方法作为参数传递,灵活使用委托可以让我们的程序更加简洁,结构清晰。

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

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

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

  2. C#常用的内置委托

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

  3. asp。net内置委托

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

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

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

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

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

  6. 十五. Python基础(15)--内置函数-1

    十五. Python基础(15)--内置函数-1 1 ● eval(), exec(), compile() 执行字符串数据类型的python代码 检测#import os 'import' in c ...

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

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

  8. 第三十五篇 类的内置属性(attr属性),包装和授权,__getattr__

    双下划线开头的attr方法,都是类内置的方法. 一. 如果没有在类里定义这三个方法,调用的时候就调用类内置的默认的方法 class Too: pass # 类没有定义这三个属性,就用系统默认的方法 t ...

  9. python函数知识五 推导式和内置函数一(了解)

    17.推导式: 推导式:将for循环多行变成一行 list推导式:[] #普通模式 print([i for i in range(20)]) #循环模式 #[变量 for i in range(20 ...

随机推荐

  1. 注册noip.com动态域名的步骤

    1.先打开这个网址 http://www.noip.com/ 2.点击页面右上绿色的Sing Up,进行注册 3.会出现这个页面,把这些填上 Create my hostname later这一项不打 ...

  2. EX:The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.

    EX:The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secu ...

  3. unity, 调节图片导入尺寸

    unity中直接导入高清图,通过max size来调节图片尺寸. 打包的时候通过看editor log或通过插件来监视是否有过大尺寸的图片.

  4. Linux LVM硬盘管理之一:概念介绍

    一.LVM概念介绍: LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现.LVM将一个或多个硬盘的分区在逻 ...

  5. RDLC An unexpected error occurred while compiling expressions. Native compiler return value: '-1073741511'

    One of my web project, which has a rdlc file using some expressions, was working fine while developi ...

  6. highchart 中数据千分位显示为空格而不是逗号的解决方案

    thousandsSep: String   一千的分隔符 在highcharts.js 中找到  thousandsSep位置,把"" 改为  ","

  7. How to backup your blogs on cnblogs

    This is an alternative to OfflineExplorer. Thanks for this article[1] which is listed in Reference s ...

  8. php 升级排错

    lnmp 环境下,升级php版本,模块都加载完成,数据库,nginx 设置都完好,但php 只能用ip 访问数据库,不能用localhost,处理要设置php.ini 的三个mysqld.sock,还 ...

  9. OAF_开发系列20_实现OAF打印功能

    ddddd 添加一个页面级的button区域:pagebuttonBar,在之下添加button item ,这里主要设置的参数有:采用默认的oaf的打印按钮的id名称: IcxPrintablePa ...

  10. Async Programming - 1 async-await 糖的本质(2)

    上一篇讲了这么多,其实说的就是一个事,return会被编译器重写成SetResult,所以如果我们的异步函数返回的是一个Task<int>,代码就要改成这样: using System; ...