在问题答案中,我找到以下编码提示: -
2)带有一个参数的简单lambda:
x => x.ToString() //simplify so many calls
作为一个尚未使用3.0的人,我并不真正理解这个技巧,但它看起来很有趣,所以我希望通过一些例子来简化这种简化调用的方法.
我研究了lambdas,所以我想我知道他们做了什么,但是我可能不完全明白所以一点点拆包也可能是有条不紊的.
当您需要创建具有单个参数的委托实例时,lambda表达式允许您以非常简洁的方式创建该委托"内联".例如,这里是通过名称查找列表中特定人员的代码:
Listlist = new List (); // [..] Populate list here Person jon = list.Find(p => p.Name == "Jon");
在C#2.0中,你可以使用一个更加冗长的匿名方法,但也不会太糟糕:
Listlist = new List (); // [..] Populate list here Person jon = list.Find(delegate(Person p) { return p.Name == "Jon"; });
在C#1.0中,你必须创建一个额外的方法.另外,如果你想参数化它,你必须创建一个不同的类型,而匿名方法和lambda表达式捕获它们的执行环境(局部变量等),所以它们就像闭包一样:
public Person FindByName(Listlist, String name) { return list.Find(p => p.Name == name); // The "name" variable is captured }
关于闭包的文章中有更多关于此的内容.
虽然将代理传递给方法在C#2.0和.NET 2.0中并不常见,但它是LINQ基础的很大一部分 - 所以你倾向于在.NET 3.5的C#3.0中大量使用它.