// 摘要:
// 表示定义一组条件并确定指定对象是否符合这些条件的方法。
//
// 参数:
// 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的更多相关文章
-
.NET (三)委托第三讲:内置委托Action
.NET 为我们提供了无返回值的内置委托 Action,代码如下: // 摘要: // 封装一个方法,该方法只有一个参数并且不返回值. // // 参数: // obj: // 此委托封装的方法的参数 ...
-
C#常用的内置委托
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
-
asp。net内置委托
Action与Func是APS.NET内置委托 //--------------无返回值的委托Action--------------------------- Action是无返回值的泛型委托 Ac ...
-
委托+内置委托方法+多播委托+lambda表达式+事件
委托概念:如果我们要把方法当做参数来传递的话,就要用到委托.简单来说委托是一个类型,这个类型可以赋值一个方法的引用. 声明委托: 在C#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字 ...
-
十五. Python基础(15)--内置函数-1
十五. Python基础(15)--内置函数-1 1 ● eval(), exec(), compile() 执行字符串数据类型的python代码 检测#import os 'import' in c ...
-
.NET (二)委托第二讲:内置委托Func
在上一章节中,我们自己声明了一个委托: public delegate bool Cal(int num); 接受int参数,返回bool类型,目的是过滤集合中的 奇数 或者 偶数. .NET 为我们 ...
-
第三十五篇 类的内置属性(attr属性),包装和授权,__getattr__
双下划线开头的attr方法,都是类内置的方法. 一. 如果没有在类里定义这三个方法,调用的时候就调用类内置的默认的方法 class Too: pass # 类没有定义这三个属性,就用系统默认的方法 t ...
-
python函数知识五 推导式和内置函数一(了解)
17.推导式: 推导式:将for循环多行变成一行 list推导式:[] #普通模式 print([i for i in range(20)]) #循环模式 #[变量 for i in range(20 ...
-
.NET (四)委托第四讲:内置委托Comparison
// 摘要: // 表示比较同一类型的两个对象的方法. // // 参数: // x: // 要比较的第一个对象. // // y: // 要比较的第二个对象. // // 类型参数: // T: / ...
随机推荐
-
MysqlNDB集群配置
为了避免不必要的资源分配,默认情况下是不启动ndbcluster引擎.
-
关于JAVA日志
虽然工作有一年了,做了好几个项目,但是对于日志这一块还只局限于拷贝配置文件,对于实现细节和灵活使用都还不会,主要的原因还是以前一直没有重视,在经历了好几个项目以后越发的觉得日志的重要性了.所以这几天都 ...
-
[知识库分享系列] 二、.NET(ASP.NET)
最近时间又有了新的想法,当我用新的眼光在整理一些很老的知识库时,发现很多东西都已经过时,或者是很基础很零碎的知识点.如果分享出去大家不看倒好,更担心的是会误人子弟,但为了保证此系列的完整,还是选择分享 ...
-
JAVA操作Hbase基础例子
package com.cma.hbase.test; import java.io.BufferedInputStream; import java.io.BufferedReader; impor ...
-
SQL SERVER FOR 多列字符串连接 XML PATH 及 STUFF
原文:SQL SERVER FOR 多列字符串连接 XML PATH 及 STUFF 本来用 Writer 写一篇关于一列多行合并的博客来的,结果快写完了时候,在一个插入代码时候,崩了,重新打开,居然 ...
-
drupal错误: Maximum execution time of 240 seconds exceeded
drupal7.5安装完成,导入汉化包时,出现错误: Fatal error: Maximum execution time of 240 seconds exceeded in D:\phpweb\ ...
-
化工厂装箱员 洛谷 p2530
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
-
Python数据类型的可变与不可变
首先,我们需要知道在python中哪些是可变数据类型,哪些是不可变数据类型.可变数据类型:列表list和字典dict:不可变数据类型:整型int.浮点型float.字符串型string和元组tuple ...
-
Android 其他特效展示
Android开源项目发现----其他特殊效果篇(持续更新) 发表时间:2014-03-01 15:10:10 来源:本站整理 浏览(160) Android开源项目发现----其他特殊效 ...
-
ctf-HITCON-2016-houseoforange学习
目录 堆溢出点 利用步骤 创建第一个house,修改top_chunk的size 创建第二个house,触发sysmalloc中的_int_free 创建第三个house,泄露libc和heap的地址 ...