如何使用Predicate以及如何自定定义Predicate委托

微软公司提供只能返回bool值,接受一个参数的委托类型(Predicate)。
//Predicate委托
public static class PredicateDemo{
    //内置方法
    public static void TestPredicate(){
        //泛型集合
        List<User> user = Five.GetList();
        //user.Find();
        //返回一个bool值
        //例1
        List<user> newUslist = user.FindAll(new Predicate<User>(delegate(User u){u.age>10;}));

        //返回一个bool值
        //例2
        List<user> newUslist = user.FindAll(new Predicate<User>(delegate(User u ){
            bool isTrue = false;
            if(u.PassWord.equals("123")&&u.age > 10){
                isTrue =true;
            }
            return isTrue;
        }));

        Console.WriteLine(newUslist.toList());

        //调用自定义委托
        List<User> newUslist = user.MyFind(new PanDuan<User>(delegate(User u){
            bool isTrue =false;
            if(u.PassWord.equals("123")&&u.age > 10){
                isTrue =true;
            }
            return isTrue;
        }));
    }

    #region 自定义委托
    public delegate bool PanDuan<T>(T t);

    public static List<T> MyFind(this List<T> ls,PanDuan<T> match){
        List<T> newTs = new List<T>();
        foreach(T t in ls){
            if(match(t)){
                newTs.Add(t);
            }
        }
        return newTs;
    }
    #endregion

    //上面两个例子放回结果是一样的。

    -----------------------------------------------
    lambad表达式

    //例2
    List<user> newUslist = user.FindAll(new Predicate<User>(delegate(User u ){
        bool isTrue = false;
        if(u.PassWord.equals("123")&&u.age > 10){
            isTrue =true;
        }
        return isTrue;
    }));
    第一步去掉 new Predicate<User>
    List<user> newUslist = user.FindAll(delegate(User u ){
        bool isTrue = false;
        if(u.PassWord.equals("123")&&u.age > 10){
            isTrue =true;
        }
        return isTrue;
    });
    第二步去掉 去掉匿名函数delegate(User u)换成 u=>
    List<user> newUslist = user.FindAll({
        bool isTrue = false;
        if(u.PassWord.equals("123")&&u.age > 10){
            isTrue =true;
        }
        return isTrue;
    }));
    如下:
    List<user> newUslist = user.FindAll(u=>{
        bool isTrue = false;
        if(u.PassWord.equals("123")&&u.age > 10){
            isTrue =true;
        }
        return isTrue;
    });

    //自定义委托改写lambad表达式
        //调用自定义委托
        List<User> newUslist = user.MyFind(u=>{
            bool isTrue =false;
            if(u.PassWord.equals("123")&&u.age > 10){
                isTrue =true;
            }
            return isTrue;
        });
} 
 
时间: 2024-11-15 12:16:07

如何使用Predicate以及如何自定定义Predicate委托的相关文章

通过定义任务委托的方法处理 action

using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace BZ.Web.QiYe.Handler { /// <summary> /// Handler1 的摘要说明 /// </summary> public class Handler1 : IHttpHandler { private delegate void task(); //定义任务委托

C#中Predicate&lt;T&gt;与Func&lt;T, bool&gt;泛型委托的用法实例

本文以实例形式分析了C#中Predicate<T>与Func<T, bool>泛型委托的用法,分享给大家供大家参考之用.具体如下: 先来看看下面的例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 static void Main(string[] args) { List<string> l = new List<string>(); l.Add("a"); l.Add("b");

STL - 判断式(Predicate) - 单参判断式(Unary Predicate)

Predicate是一种特殊的辅助函数,它会返回Boolean,常常被用来作为排序或者查找准则. Predicate会有1个或者2个操作数. Unary Predicate(单参判断式) 例子: 我们先写一个算法,如下: MathUtil.h #ifndef _Math_Util_H_ #define _Math_Util_H_ using namespace std; class MathUtil { public: static bool isPrime(int number); }; #e

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

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 (1). delegate delegate我们常用到的一种声明   Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型.   例:public delegate int MethodtDelegate(int x, int y);表示有两个参数,并返回int型. (2). Action Action是无返回值的泛型委托. Action 表示无参,

浅谈C#中常见的委托&lt;Func,Action,Predicate&gt;(转)

http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html 一提到委托,浮现在我们脑海中的大概是听的最多的就是类似C++的函数指针吧,呵呵,至少我的第一个反应是这样的. 关于委托的定义和使用,已经有诸多的人讲解过,并且讲解细致入微,尤其是张子阳的那一篇.我就不用多废话了. 今天我要说的是C#中的三种委托方式:Func委托,Action委托,Predicate委托以及这三种委托的常见使用场景. Func,Action,Predi

通过IL分析C#中的委托、事件、Func、Action、Predicate之间的区别与联系

一直以来都是对于事件与委托比较混淆,而且不太会用.找了个时间,总结了一下,感觉清晰了很多. 先说一下个人理解的结论吧: delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类. delegate声明的变量与delegate声明的事件,并没有本质的区别,事件是在delegate声明变量的基础上包装而成的,类似于变量与属性的关系(在IL代码中可以看到每一个delegate声明的事件都对应是私有的delegate声明的变量),提升了安全性. Action 与Func:这两个其实

C#委托(delegate、Action、Func、predicate)

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 (1). delegate delegate我们常用到的一种声明   Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型.   例:public delegate int MethodtDelegate(int x, int y);表示有两个参数,并返回int型. (2). Action Action是无返回值的泛型委托. Action 表示无参,

泛型委托 Predicate/Func/Action

Predicate 泛型委托  表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素.看看下面它的定义: // Summary:    //     Represents the method that defines a set of criteria and determines whether    //     the specified object meets those criteria.    ////

Delegate Action&lt;T in&gt; Func&lt;T in,out Tresult&gt; Predicate&lt;T&gt;

action<T> 和  func<T> 都是delegate的简写形式,其中T为可以接受的参数类型 action<T> 指那些只有输入参数,没有返回值 Delegate 的代码 1 public delegate void myDelegate(string str); //申明 2 public static void HellowChinese(string strChinese) 3 { 4 Console.WriteLine("Good mornin