zoukankan      html  css  js  c++  java
  • 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;
            });
    } 
     
  • 相关阅读:
    20210108 android学习
    20210106 android学习
    20210105 android学习
    20210104 android学习
    httpClient请求转发个人理解
    CefSharp如何判断页面是否加载完
    C#/WPF 使用的Task线程程序缺依旧响应缓慢问题
    修改LiveChart的提示显示位置
    Wpf双击放大缩小界面
    WPF设置无边框CefSharp显示不出来问题
  • 原文地址:https://www.cnblogs.com/youmingkuang/p/6275323.html
Copyright © 2011-2022 走看看