Predicate在集合搜索和WPF数据绑定中用途广泛,其调用形式:  

    调用形式:Predicate<object>(Method)/Predicate<参数类型>(方法)
         1.<>表示泛型,可以接受任何类型的参数

2.(Method)可以接受方法为参数进行传递,表示一个委托

                   3.返回类型为bool型,表示成功与否

一个例子,在empList中查找特定项:

class Employee
{
private string _firstName;
private string _lastName;
//private int _empCode;
private string _designation; public Employee()
{ }
public Employee(string firstName, string lastName, string designation)
{
_firstName = firstName;
_lastName = lastName;
_designation = designation;
}
/// <summary>
/// Property First Name
/// </summary>
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
/// <summary>
/// Property Last Name
/// </summary>
public string LastName
{
get { return _lastName; }
set { _lastName = value; }
}
public string Designation
{
get { return _designation; }
set { _designation = value; }
}

1.传统方法

定义一个搜索方法:

  static bool EmpSearch(Employee emp)
{
if (emp.FirstName == "Anshu")
return true;
else
return false;
}

使用泛型的Find()方法,Find()内部自动迭代调用EmpSearch方法

Predicate<Employee> pred = new Predicate<Employee(EmpSearch);
Employee emp = empList.Find(pred);

2.使用匿名方法

emp = empList.Find(delegate(Employee e)
{
if(e.FirstName == "Anshu")
return true;
else
return false;
});

不需要重新显式的定义方法,代码更加简洁

3.使用lambda表达式

emp = new Employee();
emp = empList.Find((e)=> {return (e.FirstName == "Anshu");});

(e)=>表示传递一个参数,参数类型能够自动解析

4.搜索列表

List<Employee> employees = new List<Employee>();
employees = empList.FindAll((e) => { return (e.FirstName.Contains("J")); });

5.搜索索引

通过指定开始索引和搜索条目的数量来缩小搜索的范围

int index = empList.FindIndex(0,2,(e) => { return (e.FirstName.Contains("J")); 

表示从索引0开始,搜索2个条目。

6.List中常用的比较器委托

给下列数组排序

var data = new List<int>();
var rand = new Random();
Console.WriteLine("Unsorted list");
for (int i = 0; i < 10; i++)
{
int d =rand.Next(0,100);
data.Add(d);
Console.Write("{0} ",d);
}

使用Lampda表示式进行从大到小排序

  data.Sort((e1, e2) => {return e1.CompareTo(e2) ;});
文章来自-似水无痕:http://www.cnblogs.com/keylei203/

C# Predicate委托的更多相关文章

  1. C#中常见的委托(Func委托、Action委托、Predicate委托)

    今天我要说的是C#中的三种委托方式:Func委托,Action委托,Predicate委托以及这三种委托的常见使用场景. Func,Action,Predicate全面解析 首先来说明Func委托,通 ...

  2. MVC ---- 如何使用Predicate以及如何自定定义Predicate委托

    微软公司提供只能返回bool值,接受一个参数的委托类型(Predicate). //Predicate委托 public static class PredicateDemo{ //内置方法 publ ...

  3. c# Action,Func,Predicate委托

    System命名空间下已经预先定义好了三中泛型委托,Action,Func和Predicate,这样我们在编程的时候,就不必要自己去定义这些委托了 Action是没有返回值的 Func是带返回值的 不 ...

  4. C#委托的介绍(delegate、Action、Func、predicate)

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 (1). delegate delegate我们常用到的一种声明   Deleg ...

  5. C#委托的介绍(delegate、Action、Func、predicate) --转载

    来源:http://www.cnblogs.com/akwwl/p/3232679.html 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1 ...

  6. .NET (五)委托第五讲:内置委托Predicate

    // 摘要: // 表示定义一组条件并确定指定对象是否符合这些条件的方法. // // 参数: // obj: // 要按照由此委托表示的方法中定义的条件进行比较的对象. // // 类型参数: // ...

  7. 【转】C# 委托的介绍(delegate、Action、Func、predicate)

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 (1). delegate delegate我们常用到的一种声明 Delegat ...

  8. C#委托的介绍(delegate、Action、Func、predicate)(转)

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 (1). delegate delegate我们常用到的一种声明   Deleg ...

  9. C#委托的介绍(delegate、Action、Func、predicate)【转】

    转自 http://www.cnblogs.com/akwwl/p/3232679.html 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1 ...

随机推荐

  1. js实现点击空白处隐藏

    部分业务要求除了某元素外点击其他对象,对应的元素隐藏,下面是一个demo效果, <!DOCTYPE html> <html> <head> <meta cha ...

  2. thinkphp empty标签

    empty标签用于判断某个变量是否为空,用法: 大理石平台检验标准 <empty name="name"> name为空值 </empty> 如果判断没有赋 ...

  3. Html+css3记录

    一.html5新特性  常用语义标签:nav footer header section mark  功能标签 video audio iframe canvas(画布和绘图功能)  input新ty ...

  4. csps-模拟7980题解

    题面:https://www.cnblogs.com/Juve/articles/11712702.html 树: 我太sb了不知道DROT是1,还在sb找根 记录一个fa[]数组,表示x的祖先中第一 ...

  5. Ubuntu 更新错误修复大全

    合并列表问题 当你在终端中运行更新命令时,你可能会碰到这个错误“合并列表错误”,就像下面这样: E:Encountered a section with no Package: header, E:P ...

  6. Markdown转义字符表

  7. csp-s模拟测试90

    csp-s模拟测试90 考场发明$Spfa$祭. $T1$按照题意模拟,然后我就发现我死了.一气之下删掉了$priority$,拍了几下发现贼jb快而且还是对的就开心地交了.$T2$的差分状态定义很棒 ...

  8. PAT甲级——A1129 Recommendation System【25】

    Recommendation system predicts the preference that a user would give to an item. Now you are asked t ...

  9. CSS清除默认边距

    body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquo ...

  10. spring-data-JPA repository自定义方法规则

    一.自定义方法的规则 Spring Data JPA框架在进行方法名解析时,会先把方法名多余的前缀截取掉,比如find,findBy,read,readBy,get,getBy,然后对剩下的部分进行解 ...