微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[C#]LambdaTest

Lambda学习

    public class LambdaTest
    {
        public delegate void noreturnnopara();
        public delegate void noreturnWithPara(int id, string name);
        public delegate int WithReturnWithPara(int id, string name);

        public void Show()
        {
            int iNum = 100;
            {
                //.NetFramework1.0 1.1
                noreturnWithPara method = new noreturnWithPara(this.Study);
                method.Invoke(123, "ByBoy");
                this.Study(123, "ByBoy");
            }
            {
                //.NetFramework2.0 匿名函数,其实就是个方法,不用独立声明;共享变量
                noreturnWithPara method = new noreturnWithPara(delegate (int id, string name)
                {
                    Console.WriteLine(iNum);
                    Console.WriteLine($"{id}-{name}跟着Eleven老师学习.Net高级开发1!");
                });
                method.Invoke(234, "楠nan");
            }
            {
                //.NetFramework3.0  lambda表达式:参数列表 goes to  方法
                noreturnWithPara method = new noreturnWithPara(
                    (int id, string name)
                    =>
                    {
                        Console.WriteLine($"{id}-{name}跟着Eleven老师学习.Net高级开发2!");
                    });
                method.Invoke(345, "ywa");
            }
            {
                //省略参数类型,语法糖,编译器自动推算,可以省略掉声明
                noreturnWithPara method = new noreturnWithPara(
                    (id, name)
                    =>
                    {
                        Console.WriteLine($"{id}-{name}跟着Eleven老师学习.Net高级开发3!");
                    });
                method.Invoke(456, "清池");
            }
            {
                //如果方法体只有一行 可以省略大括号和分号
                noreturnWithPara method = new noreturnWithPara(
                    (id, name) => Console.WriteLine($"{id}-{name}跟着Eleven老师学习.Net高级开发!4"));
                method.Invoke(456, "永远的油条");
            }
            {
                //实例化委托时,可以省略掉 new noreturnWithPara(,  
                //也是编译器提供的便捷功能,是语法糖,编译后其实还是有这段代码
                noreturnWithPara method = (id, name) => Console.WriteLine($"{id}-{name}跟着Eleven老师学习.Net高级开发!5");
                method.Invoke(567, "风行天下");
            }
            //lambda表达式是什么?! 
            //lambda是代码的简化,其本质是个方法,而不是委托(类),也不是委托的实例,只是实例化委托的时的参数!
            //反编译查看,会为lambda生成类中类,密封+私有,里面多了几个方法,跟lambda一一对应,lambda也是个语法糖,编译后会起名字
            //lambda表达式注册多播委托是无法移除的!
            //很多复杂的lambda不会写,可以回去写方法
            {
                noreturnWithPara method = (i, s) => Console.WriteLine($"{i}-{s}跟着Eleven老师学习.Net高级开发!6");
            }

            {
                //下面我准备去花式使用lambda,有问题直接问
                //Action 框架提供  0到16个参数  没有返回值的 泛型委托
                Action action = () => { };//参数为空 就小括号
                Action<string> action1 = s => Console.WriteLine(s); //只有一个参数 可以去掉小括号
                Action<string, int> action2 = (s, i) => Console.WriteLine($"{i}-{s}跟着Eleven老师学习.Net高级开发!6");
                Action<string, int, DateTime, long, string, long> action16 = null;
            }
            {
                //Func 框架提供  0到16个参数 带返回值的   泛型委托
                Func<int> func = () => DateTime.Now.Year;//如果方法体只有一行 需要去掉retrun
                Func<int, string> func1 = i => i.ToString();
                Func<int, DateTime> func2 = (i, s) => DateTime.Now;
                Func<string, decimal> func16 = null;
            }
            {
                //Action Func 都是.30出来,是为了统一委托的使用,以后只要用的到委托,都可以用。多线程Task.Run   Linq...
            }
            {
                //lambda表达式只能用在委托吗  
                //不是的  c#6 多了很多应用
                //表达式目录树,可以用lambda快速声明
                new List<int>().AsQueryable().Where(i => i > 3);
                Expression<Func<int, bool>> expression = i => i < 10;
            }

        }

        private void Donothing()
        { }

        private void Study(int id, string name)
        {
            Console.WriteLine($"{id}-{name}跟着Eleven老师学习.Net高级开发!");
        }
        //起码是vs2015才能用
        public void SayHi() => Console.WriteLine(12345);
        public int Age => 3;

    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐