MVC ---- 如何使用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;
        });
} 
 
原文地址:https://www.cnblogs.com/youmingkuang/p/6275323.html