在问题回答中,我发现了以下编码技巧:
2)具有一个参数的简单lambdas:
x => x.ToString() //simplify so many calls作为一个还没有使用3.0的人,我并不真正理解这个技巧,但是它看起来很有趣,所以我希望能用几个例子来扩展一下这个技巧如何简化调用。
我研究过兰巴达,所以我想我知道他们在做什么,但是我可能不完全理解,所以的小解压可能也是合适的。
发布于 2008-10-01 09:16:35
当您需要创建具有单个参数的委托实例时,lambda表达式允许您以非常简洁的方式创建该委托“内联”。例如,下面的代码可以在列表中找到一个特定的人,并以他们的名字命名:
List<Person> list = new List<Person>();
// [..] Populate list here
Person jon = list.Find(p => p.Name == "Jon");在C# 2.0中,您可以使用一个匿名方法,这个方法稍微长一些,但也不算太糟:
List<Person> list = new List<Person>();
// [..] Populate list here
Person jon = list.Find(delegate(Person p) { return p.Name == "Jon"; });在C# 1.0中,您必须创建一个完整的额外方法。此外,如果要将其参数化,则必须创建不同的类型,而匿名方法和lambda表达式捕获它们的执行环境(局部变量等),因此它们的作用类似于闭包:
public Person FindByName(List<Person> list, String name)
{
return list.Find(p => p.Name == name); // The "name" variable is captured
}在我关于闭包的文章中有更多关于这方面的内容。
虽然将委托传递到C# 2.0和.NET 2.0中并不是很常见,但它是LINQ3.0基础的很大一部分--所以您倾向于在C# 3.0中使用.NET 3.5。
发布于 2008-10-01 09:12:47
这基本上扩展到:
private string Lambda(object x) {
return x.ToString();
}发布于 2008-10-01 09:18:12
您熟悉C# 2.0匿名方法吗?这两个调用是等价的(假设SomeMethod接受委托等):
SomeMethod(x => x.ToString());
SomeMethod(delegate (SomeType x) { return x.ToString();});我知道哪种类型更好..。
https://stackoverflow.com/questions/156815
复制相似问题