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();
}
}
}

最新文章

  1. animation-timing-function: steps() 详解
  2. Ring0隐藏进程的方法
  3. 安装Nginx作为Windows服务自启动运行
  4. linux win 通用的获取Mac的方法
  5. iOS CAShapeLayer精讲
  6. spring03autowire属性
  7. Chrome 控制台不完全指南(转)
  8. Android视图重绘,使用invalidate还是requestLayout
  9. mvc webapi+autofac + session 的使用
  10. 11LaTeX学习系列之---LaTeX的特殊字符
  11. oracle 存储过程 clob 字段 调试
  12. vue系列之获取多选框中被选中的值
  13. Go Revel - Cache(缓存)
  14. python doc
  15. Thrift——栗子
  16. 不移除通知的话,出现的bug
  17. JavaScript权威指南——词法结构(4)
  18. Python调shell
  19. java按照字节切割字符串,解决汉字的问题
  20. SDL结合QWidget的简单使用说明(2)

热门文章

  1. ELK系列--问题汇总(二)
  2. docker 解决network has active endpoints
  3. Ubuntu 如何更换阿里源
  4. TopTicTacToe 开发文档
  5. 第9天-BOM和DOM
  6. 光线求交-面、三角形、球 (Ray intersection)
  7. Divisible by Seven CodeForces - 376C (数论)
  8. 【BZOJ 2179】 2179: FFT快速傅立叶 (FFT)
  9. 【BZOJ 4035】 4035: [HAOI2015]数组游戏 (博弈)
  10. [BZOJ4873][六省联考2017]寿司餐厅(最大权闭合子图)