关于Predicate<T>委托
2024-08-30 13:49:57
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();
}
}
}
最新文章
- animation-timing-function: steps() 详解
- Ring0隐藏进程的方法
- 安装Nginx作为Windows服务自启动运行
- linux win 通用的获取Mac的方法
- iOS CAShapeLayer精讲
- spring03autowire属性
- Chrome 控制台不完全指南(转)
- Android视图重绘,使用invalidate还是requestLayout
- mvc webapi+autofac + session 的使用
- 11LaTeX学习系列之---LaTeX的特殊字符
- oracle 存储过程 clob 字段 调试
- vue系列之获取多选框中被选中的值
- Go Revel - Cache(缓存)
- python doc
- Thrift——栗子
- 不移除通知的话,出现的bug
- JavaScript权威指南——词法结构(4)
- Python调shell
- java按照字节切割字符串,解决汉字的问题
- SDL结合QWidget的简单使用说明(2)
热门文章
- ELK系列--问题汇总(二)
- docker 解决network has active endpoints
- Ubuntu 如何更换阿里源
- TopTicTacToe 开发文档
- 第9天-BOM和DOM
- 光线求交-面、三角形、球 (Ray intersection)
- Divisible by Seven CodeForces - 376C (数论)
- 【BZOJ 2179】 2179: FFT快速傅立叶 (FFT)
- 【BZOJ 4035】 4035: [HAOI2015]数组游戏 (博弈)
- [BZOJ4873][六省联考2017]寿司餐厅(最大权闭合子图)