• 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
  • 相关阅读:
    Firefly多路人脸识别解决方案
    Jquery插件开发之图片放大镜效果(仿淘宝)
    html5 Game开发系列文章之 零[开篇]
    html5 Game开发系列文章之 一 精灵(上)
    html5 Game开发系列文章之 三 搭建基本游戏框架(代码封装)
    html5 Game开发系列文章之 二 精灵(下)
    JQEURY 插件之 简洁小提示框效果[ToolTips]
    18位身份证和组织机构代码校验ORACLE函数
    linux下apache+SVN搭建完美版
    MYSQL的常用命令和增删改查语句和数据类型
  • 原文地址:https://www.cnblogs.com/Dewumu/p/10652549.html
Copyright © 2020-2023  润新知