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变量的控制,结果不可控,容易出现编程问题,用的时候要谨慎。
        }
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值