首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解释x => x.ToString() //简化这么多调用

解释x => x.ToString() //简化这么多调用
EN

Stack Overflow用户
提问于 2008-10-01 09:11:00
回答 4查看 1.7K关注 0票数 7

问题回答中,我发现了以下编码技巧:

2)具有一个参数的简单lambdas:

代码语言:javascript
运行
复制
x => x.ToString() //simplify so many calls

作为一个还没有使用3.0的人,我并不真正理解这个技巧,但是它看起来很有趣,所以我希望能用几个例子来扩展一下这个技巧如何简化调用。

我研究过兰巴达,所以我想我知道他们在做什么,但是我可能不完全理解,所以的小解压可能也是合适的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-10-01 09:16:35

当您需要创建具有单个参数的委托实例时,lambda表达式允许您以非常简洁的方式创建该委托“内联”。例如,下面的代码可以在列表中找到一个特定的人,并以他们的名字命名:

代码语言:javascript
运行
复制
List<Person> list = new List<Person>();
// [..] Populate list here
Person jon = list.Find(p => p.Name == "Jon");

在C# 2.0中,您可以使用一个匿名方法,这个方法稍微长一些,但也不算太糟:

代码语言:javascript
运行
复制
List<Person> list = new List<Person>();
// [..] Populate list here
Person jon = list.Find(delegate(Person p) { return p.Name == "Jon"; });

在C# 1.0中,您必须创建一个完整的额外方法。此外,如果要将其参数化,则必须创建不同的类型,而匿名方法和lambda表达式捕获它们的执行环境(局部变量等),因此它们的作用类似于闭包:

代码语言:javascript
运行
复制
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。

票数 21
EN

Stack Overflow用户

发布于 2008-10-01 09:12:47

这基本上扩展到:

代码语言:javascript
运行
复制
private string Lambda(object x) {
  return x.ToString();
}
票数 2
EN

Stack Overflow用户

发布于 2008-10-01 09:18:12

您熟悉C# 2.0匿名方法吗?这两个调用是等价的(假设SomeMethod接受委托等):

代码语言:javascript
运行
复制
SomeMethod(x => x.ToString());

SomeMethod(delegate (SomeType x) { return x.ToString();});

我知道哪种类型更好..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/156815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档