C# 学习笔记_委托(四)匿名方法与lambda表达式

匿名方法

    class Program
    {

        static int Test1(int arg1, int arg2)
        {
            return arg1 + arg2;
        }  
        static void Main(string[] args)
        {
            Func<int, int, int> plus = Test1;
            //匿名方法形式
            //一般用于回调
            //本质上还一个方法,只是没有名字,任何使用委托变量的地方都可以使用匿名方法赋值
            Func<int, int, int> plus1 = delegate (int arg1, int arg2)
                {
                    return arg1 + arg2;
                };
        }
    }


lamabda表达式

    class Program
    {
        static void Main(string[] args)
        {
            //Func<int, int, int> plus1 = delegate (int arg1, int arg2)
            //{
            //    return arg1 + arg2;
            //};

            //lambda表达式用来代替匿名方法,所以一个lambda表达式也是定义了一个方法
            //lambda表达式的参数是不需要声明类型的
            Func<int, int, int> plus1 = (int arg1, int arg2)=>
            {
                return arg1 + arg2;
            };

            //lambda表示的参数只有一个的时候,可以不加上括号,当函数体的语句只有一句的时候,我们可以不加上大括号,也可以不加上Return语句
            //如果lambda表达式的失信代码中需要多条语句,就必须添加花括号和return语句
            Func<int, int> plus2 = a => a+1;
            Func<int, int> plus3 = a =>
            {
                return a + 1;
            };

            Console.WriteLine(plus1(90, 60));
            Console.WriteLine(plus2(90));
            Console.WriteLine(plus3(90));

            Console.ReadKey();


            //通过lambda表达式可以访问lambda表达式块外部的变量。这是一个非常好的功能,但是如果不能正确使用也会很危险。
            int somVal = 5;
            Func<int, int> f = x => x + somVal;
            Console.WriteLine(f(3)); //结果是8
            somVal = 7;
            Console.WriteLine(f(3)); //结果是10

            //这个方法的结果,不但受到参数的控制,还收到somVal变量的控制,结果不可控,容易出现编程问题,用的时候要谨慎。
        }
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章