• 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;
            });
    } 
     
  • 相关阅读:
    11.重写、抽象、接口、异常
    3.用户组、指令运行级别、帮助指令、文件目录类(一)
    2.vi和vim编辑器、vi和vim三种模式、vi和vim快捷键、关机、重启命令、用户管理
    1.VM和Linux系统(centos)安装、linux目录结构、远程登录到Linux服务器、远程上传下载文件xftp
    10.函数、流程控制
    9.变量、存储过程
    8.事务、视图
    7.库和表的管理、常见数据类型、常见约束、标识符
    CH6801 棋盘覆盖(二分图最大匹配)
    洛谷P1525 关押罪犯(二分图判定+二分)
  • 原文地址:https://www.cnblogs.com/youmingkuang/p/6275323.html
Copyright © 2020-2023  润新知