zoukankan      html  css  js  c++  java
  • C# Lambda

    一、Lambda演变历史

    Lambda 1.0 普通方法

            private void DoNothing()
            {
                Console.WriteLine("This is DoNothing");
            }
    
            private void Study(int id, string name)
            {
                Console.WriteLine($"{id} {name} 正在学习");
            }
    View Code

     声明委托      讲方法作为参数

            public delegate void NoReturnNoPara();
            public delegate void NoReturnWithPara(int x, string y);//1 声明委托
            public delegate int WithReturnNoPara();
            public delegate string WithReturnWithPara(out int x, ref int y);
    View Code
               {
                    //.NetFramework1.0  1.1
                    NoReturnNoPara method = new NoReturnNoPara(this.DoNothing);
                }
    View Code

    2.0    出现了匿名方法  使用delegate关键字 声明

                {
                    //.NetFramework2.0  匿名方法,delegate关键字
                    //可以访问局部变量
                    NoReturnWithPara method = new NoReturnWithPara(delegate (int id, string name)
                    {
                        Console.WriteLine(i);
                        Console.WriteLine($"{id} {name} 正在学习");
                    });
                    method.Invoke(1, "name");
                }
    2.0

    3.0   去掉delegate关键字  将方法用=>连接

                {
                    //.NetFramework3.0   把delegate关键字去掉,增加了一个箭头=>
                    //lambda表达式  参数列表=>方法体
                    NoReturnWithPara method = new NoReturnWithPara(
                        (int id, string name) =>
                    {
                        Console.WriteLine($"{id} {name} 正在学习");
                    });
                    method.Invoke(123, "aaa");
                }
    3.0

     方法的参数类型 可以由委托推算  因此可以省略参数类型

               {
                    NoReturnWithPara method = new NoReturnWithPara(
                        (id, name) =>//省略参数类型,编译器的语法糖,虽然没写,编译时还是有的,根据委托推算
                        {
                            Console.WriteLine($"{id} {name} 正在学习");
                        });
                    method.Invoke(123, "bbb");
                }
    View Code

     进一步简化  当方法只有一行时,可以省略外层的大括号和分号     只有一个参数时可以省略方法的外层括号

               {
                    NoReturnWithPara method = new NoReturnWithPara(
                        (id, name) => Console.WriteLine($"{id} {name} 正在学习"));
                    //如果方法体只有一行,可以去掉大括号和分号
                    method.Invoke(123, "ccc");
                }
    View Code

     委托也可以省略 编译器编译时会自动加上

               {
                    NoReturnWithPara method = (id, name) => Console.WriteLine($"{id} {name} 正在学习");
                    method.Invoke(123, "ddd"); //new NoReturnWithPara可以省掉,也是语法糖,编译器自动加上
                }
    View Code
  • 相关阅读:
    URL中“#”
    2、Distributed Optimization
    转:增强学习(二)----- 马尔可夫决策过程MDP
    转:强化学习(Reinforcement Learning)
    强化学习学习资料
    转:A Painless Q-learning Tutorial (一个 Q-learning 算法的简明教程)
    1、通过搜索进行问题求解
    CMOS与BIOS
    转:Spring-session & redis 子域名共享session
    基于 token 的认证应用
  • 原文地址:https://www.cnblogs.com/Dewumu/p/10652549.html
Copyright © 2011-2022 走看看