C#中的Lambda表达式

Lambda表达式

其实质上是用来代替匿名方法的。
因此一个Lambda表达式也是定义了一个方法,只是形式上比匿名方法简单。
只要有委托类型的地方就可以使用Lambda表达式。
Lambda运算符:=>
匿名方法:

Func<int, int, int> plus = delegate(int arg1, int arg2)
{
    return arg1 + arg2;
}

Lambda表达式:

Func<int, int, int> plus = (arg1, arg2)=>
{
    return arg1 + arg2;
}

可以看到,Lambda表达式不需要声明delegate关键字,参数也不需要声明类型,因为Func中已经声明了参数类型了。

  • 当只有一个参数时,可以不需要括号;
  • 当方法体中只有一条语句时,可以不用{ },也可以不使用return,编译器会自动添加return语句。
//等效1)Func<int, int> test1 = arg => 35;
(2)Func<int, int> test1 = (arg) => 
    {
        return 35;
    }

//等效1)Func<int, int> test2 = arg => arg+1;
(2)Func<int, int> test2 = (arg) => 
    {
        return arg + 1;
    }
  • 但是,当Lambda表达式的实现代码中需要用到多条语句时,就必须添加{ }和return语句了。

Lambda表达式的外部变量

通过Lambda表达式可以访问Lambda表达式块外部的变量。
虽然这个功能很好,便于访问其他变量。但是如果不能正确使用,也可能造成很多风险,出现逻辑问题。
example:

int someVal = 5;
Func<int, int> f = x => x + someVal;
Console.WriteLine(f(3));    //输出为8

someVal = 7;    //可能被无意间修改
Console.WriteLine(f(3));    //输出为10!?

以上方法的结果,不但受到参数的控制,而且还受到someVal的影响,使得输出结果不可控,容易出现编程和逻辑问题,这是我们不希望看到的。
使用外部变量的方法作为了解,一般来说少用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值