当前位置: 首页 > news >正文

关于PredicateT委托

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();
}
}
}
复制代码

 

转载于:https://www.cnblogs.com/zhangchenliang/p/3265681.html

相关文章:

  • Groovy String类型null和empty()判断
  • 使用GitHub进行团队合作
  • 源码阅读:SDWebImage(十八)——UIView+WebCache
  • Visual Studio 2015 介绍
  • ftp的主动模式active mode和被动模式 passive mode的配置和区别
  • BZOJ3932[CQOI2015]任务查询系统——主席树
  • DotNetTextBox V3.0 所见即所得编辑器控件 For Asp.Net2.0(ver 3.1.7Beta)
  • matplotlib较好的博客
  • 在ubuntu中搭建guacamole
  • unittest参数化
  • NTP服务器时间同步
  • jquery中的基本理解以及样式属性操作
  • 机票分享第一篇 机票由何而来
  • 马斯克“地狱”归来,回应一切
  • win7 打开office失败并提示“向程序发送命令错误” 解决方法
  • 2017 年终总结 —— 在路上
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript类型识别
  • Js基础——数据类型之Null和Undefined
  • Laravel 实践之路: 数据库迁移与数据填充
  • VUE es6技巧写法(持续更新中~~~)
  • 从零搭建Koa2 Server
  • 目录与文件属性:编写ls
  • 前端之Sass/Scss实战笔记
  • 如何设计一个比特币钱包服务
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 微信小程序:实现悬浮返回和分享按钮
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 主流的CSS水平和垂直居中技术大全
  • scrapy中间件源码分析及常用中间件大全
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (转载)Linux 多线程条件变量同步
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .Net Redis的秒杀Dome和异步执行
  • .net 调用php,php 调用.net com组件 --
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET 依赖注入和配置系统
  • .net程序集学习心得
  • .NET关于 跳过SSL中遇到的问题
  • .net快速开发框架源码分享
  • @JsonFormat与@DateTimeFormat注解的使用
  • [AAuto]给百宝箱增加娱乐功能
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [BZOJ 1032][JSOI2007]祖码Zuma(区间Dp)
  • [C#] 如何调用Python脚本程序
  • [C#]DataTable常用操作总结【转】
  • [GYCTF2020]Ez_Express