Predicate<T>委托在.NET类类库中经常出现,此委托的定义如下:

public delegatebool Predicate<T>(T obj);

从其定义可以看到,此委托引用一个返回bool 值的方法,在实际开发中,通常使用Predicate<T>委托变量引用一个“判断条件函数”,在判断条件函数内部书写代码表明

函数参数所引用的对象应满足的条件,条件满足时,函数返回true.

在类库中,List<T> 里面的 Find方法, 定义如下:

public T Find(Predicate<T> match);

那么我们可以在外部定义一个查找的规则方法。见以下示例代码:

namespace UsePredicateDelegate{class MyClass    {public int Value;public string Information;    }

class Program    {/// <summary>/// 创建一个MyClass类型的对象集合/// </summary>/// <returns></returns>        private static List<MyClass> GetMyClassList()        {            List<MyClass> lst = new List<MyClass>();            Random ran = new Random();            MyClass obj = null;for (int i = 0; i < 10; i++)            {                obj = new MyClass { Value = ran.Next(1, 100), Information = "object" + i.ToString() };                lst.Add(obj);            }return lst;        }

/// <summary>/// 打印一个MyClass对象集合的所有成员/// </summary>/// <param name="lst"></param>        private static void PrintList(List<MyClass> lst)        {if (lst == null)return;foreach (MyClass obj in lst)                Console.WriteLine("Infomation={0},Value={1}", obj.Information, obj.Value);        }

static bool GreaterThan50(MyClass elem)        {if (elem.Value > 50)return true;return false;        }

static void Main(string[] args)        {            Predicate<MyClass> pred = GreaterThan50;            List<MyClass> lst = GetMyClassList();            Console.WriteLine("生成的MyClass对象集合为:");            PrintList(lst);           MyClass foundElement= lst.Find(pred);if (foundElement != null)               Console.WriteLine("找到了符合条件的对象。Infomation={0},Value={1}", foundElement.Information, foundElement.Value);else               Console.WriteLine("未找到符合条件的对象");            Console.ReadKey();        }    }}

关于PredicateT委托相关推荐

  1. c# 带返回值的action_C#委托Action、ActionT、FuncT、PredicateT

    一.Action Action封装的方法没有参数也没有返回值,声明原型为: 1 public delegate void Action(); 用法如下: 1 public void Alert() 2 ...

  2. C#委托Action、ActionT、FuncT、PredicateT

    CLR环境中给我们内置了几个常用委托Action. Action<T>.Func<T>.Predicate<T>,一般我们要用到委托的时候,尽量不要自己再定义一 个 ...

  3. c#委托与事件(二)

    这篇博客是在上篇的基础开始讲述了一下委托的一些用法,首先我举一个例子说明了一下前面章节的知识点,接下来我说了将方法作为参数传递的一个案例,接下来实现了一个委托实现冒泡排序的方法,如果你们和我一样正在学 ...

  4. RanceQuest2_从委托到Lambda_会用(递归数学函数)

    二连发 使用Lambda表达式编写递归函数 --摘自老赵点滴 - 追求编程之美. todo用手敲30遍,搞定--泛型委托,Lambda表达式,简单的数学递归. 遗憾的是,原本希望更进一步做出一个通用的 ...

  5. 利用委托和泛型实现树的常用操作

    在日常开发中,经常遇到对树的操作,我们可以利用泛型和委托对这些树进行操作,这样就不需要每有一个树就要实现相应的功能了. 源码在http://files.cnblogs.com/haiconc/Lang ...

  6. 理解委托(delegate)及为什么要使用委托

    委托:是一种定义方法签名的类型. 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联. 您可以通过委托实例调用方法. 上述为官方说法,理解起来比较难,举个生活中的例子: 某人有三子,让他们各 ...

  7. dom元素滚动条高度 js_DOM 事件与事件委托

    点击事件 <div class = 爷爷><div class = 爸爸><div class = 儿子>文字</div></div> &l ...

  8. C#编码实践:使用委托和特性调用指定函数

    2019独角兽企业重金招聘Python工程师标准>>> 建立一个C#控制台应用程序AttributeTest. 建立一个类Operations,代码如下: namespace Att ...

  9. 匹夫细说C#:委托的简化语法,聊聊匿名方法和闭包

    0x00 前言 通过上一篇博客<匹夫细说C#:庖丁解牛聊委托,那些编译器藏的和U3D给的>的内容,我们实现了使用委托来构建我们自己的消息系统的过程.但是在日常的开发中,仍然有很多开发者因为 ...

最新文章

  1. java major version: 51,Unsupported major.minor version 51.0的原因与解决办法
  2. 两台xenserver 同一个vlan中的vm 不能ping通?
  3. python中pillow库怎么使用_Python 图像库Pillow使用
  4. js中组装拼接json对象,通过java后端接收并解析
  5. fscanf不读取_NCNN-Breakdown(3) 读取网络的proto信息
  6. LeetCode学习记录(10)
  7. Python和C++的混合编程(使用Boost编写Python的扩展包)
  8. 基于SSM开发的的小区物业管理系统小程序源码
  9. 【计算机网络微课堂】3.3 差错检测
  10. 微软Excel 2007 框里打钩/打钩的方框选择
  11. arduino 矩阵肩膀_表情矩阵——卖萌无需多言(arduino)
  12. 有效解决Adobe Acrobat XI 闪退问题
  13. 为什么mysql的delete操作不释放磁盘空间
  14. MATLAB中内置的BP神经网络函数 help newff翻译【学习笔记】
  15. 二十五条哈佛励志金句
  16. 小白入职公司都是自己看,嫌弃增删改查,做了2年感觉没前途?
  17. 【Python中的】列表生成式和字典生成式以及内置函数
  18. A JSONObject text must begin with '{' at 1 [character 2 line 1]
  19. 千峰逆战第十二天---mvc,JSTL
  20. dz云服务器配置,买了云服务器怎么安装dz论坛

热门文章

  1. apache2 安装时报错 ServerRoot must be a valid directory
  2. Nginx开启访问日志记录
  3. win10新建管理员账户_电脑技巧|Win10家庭版如何开启超级管理员账户
  4. Android Studio生成函数注释
  5. win10安装Visual Studio Code(VSCode)
  6. python重写和重载的区别_Java 重写(Override)与重载(Overload)
  7. chart控件做实时曲线显示_Spark+Kafka+WebSocket+eCharts实时分析-完全记录(5)
  8. 第一台电子计算机于1846年诞生,全国2010年1月高等教育自学考试计算机与网络技术基础试题.doc...
  9. 中学计算机课程课时,初中信息技术基础教案设计(课时).doc
  10. 最大尺寸分辨率_LG UltraFine 4K显示器重上架苹果商店:尺寸变大,但降为UHD