C#内置的几种委托详解,lambda表达式的演变

系统内置的委托          

   使用委托:方法的签名要和委托一致。

    1.System.Func 代表有返回类型的委托
              |--public delegate TResult Func<out TResult>();

              |--public delegate TResult Func<in T,out TResult>(T tag); 

     注:输入泛型参数-in最多16个,输出泛型桉树-out只有一个

     
    2.System.Action 代表 ,无返回值的委托  public delegate void Delegate();
     
    3.System.Predicate<T> 代表返回bool类型的委托,用作执行表达式
              public delegate bool Predicate<in T>(T obj);    
              

    4.System.Comparison<T> 代表返回int类型的委托  --用作比较两个参数的大小


1.Action无返回值的委托

        static void Delegate_Action()
        {
            List<Person> plist = GetPersonList();
            //传统的foreach遍历
            // plist.ForEach(fe);
            //plist.ForEach(delegate(Person p) { Console.WriteLine(p.Name); });
            //plist.ForEach((Person p) => { Console.WriteLine(p.Name); });
            plist.ForEach(p => Console.WriteLine(p.Name));
        }
        static void fe(Person p)
        {
            //无返回值 就是逻辑代码处理咯
            Console.WriteLine(p.Name);
        }
2.Func有返回值的委托

        static void Delegate_Func()
        {
            var plist = GetPersonList();
            //plist.Where(c => c.Age > 30);
            //输入一个泛型 Person的,一个输出的bool值 
            //plist.Where(Func<Person,bool>(Person p))
            plist.Where(delegate(Person p) { return p.Age > 30; });     
            plist.Where(p => p.Age > 30).ToList().ForEach(c => Console.WriteLine(c.Age)); 
        }
3.Predicate 返回bool类型的委托,用作执行表达式。

 static void Delegate_Predicate()
        {
            List<Person> plist = GetPersonList();
            //1.0 查询年龄大于30岁的人员信息    
            //转到定义看参数描述public delegate bool Predicate<in T>(T obj);
            plist.FindAll(Query);
            //1.0.1 演变 利用匿名委托来代替自定义方法query
            plist.FindAll(delegate(Person p) { return p.Age > 30; });
            //1.0.2 演变 匿名委托很多东西都可以神略掉 delegate省略()里面参数列表,如果没有 括号也不可省略,=> { 方法体 }
            plist.FindAll((Person p) => { return p.Age > 30; });   //  =>  goes to 分隔符
            //1.0.3 演变->lambda表达式 括号、return 都去掉,只留一个参数名字和方法体内容即可
            plist.FindAll(p => p.Age > 30); //p就是形参名了 编译器根据FindAll来推理到pList集合中,那么p就是Person对象了
        }




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值