当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《解释x=>x.ToString()//简化这么多的调用》经验,为你挑选了1个好方法。

在问题答案中,我找到以下编码提示: -

2)带有一个参数的简单lambda:

x => x.ToString() //simplify so many calls

作为一个尚未使用3.0的人,我并不真正理解这个技巧,但它看起来很有趣,所以我希望通过一些例子来简化这种简化调用的方法.

我研究了lambdas,所以我我知道他们做了什么,但是我可能不完全明白所以一点点拆包也可能是有条不紊的.



1> Jon Skeet..:

当您需要创建具有单个参数的委托实例时,lambda表达式允许您以非常简洁的方式创建该委托"内联".例如,这里是通过名称查找列表中特定人员的代码:

List list = new List();
// [..] Populate list here
Person jon = list.Find(p => p.Name == "Jon");

在C#2.0中,你可以使用一个更加冗长的匿名方法,但也不会糟糕:

List list = new List();
// [..] Populate list here
Person jon = list.Find(delegate(Person p) { return p.Name == "Jon"; });

在C#1.0中,你必须创建一个额外的方法.另外,如果你想参数化它,你必须创建一个不同的类型,而匿名方法和lambda表达式捕获它们的执行环境(局部变量等),所以它们就像闭包一样:

public Person FindByName(List list, 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中大量使用它.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有