C# 解释x=>;x、 ToString()//简化这么多调用

C# 解释x=>;x、 ToString()//简化这么多调用,c#,.net-3.5,lambda,C#,.net 3.5,Lambda,在a中,我找到了以下编码技巧:- 2) 具有一个参数的简单lambda: x => x.ToString() //simplify so many calls 作为一个还没有使用过3.0的人,我不太理解这个技巧,但它看起来很有趣,所以我希望通过几个例子来说明这是如何简化调用的 我研究过lambdas,所以我认为我知道它们是做什么的,但是我可能不完全理解,所以一点拆包也可能是正确的。这基本上扩展到: private string Lambda(object x) { return x.

在a中,我找到了以下编码技巧:-

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

x => x.ToString() //simplify so many calls
作为一个还没有使用过3.0的人,我不太理解这个技巧,但它看起来很有趣,所以我希望通过几个例子来说明这是如何简化调用的


我研究过lambdas,所以我认为我知道它们是做什么的,但是我可能不完全理解,所以一点拆包也可能是正确的。

这基本上扩展到:

private string Lambda(object x) {
  return x.ToString();
}

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

List<Person> list = new List<Person>();
// [..] Populate list here
Person jon = list.Find(p => p.Name == "Jon");
List List=新列表();
//[…]在此处填充列表
personjon=list.Find(p=>p.Name==“jon”);
在C#2.0中,您可以使用一种匿名方法,这种方法有点冗长,但也不太糟糕:

List List=新列表();
//[…]在此处填充列表
personjon=list.Find(委托(personp){返回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
}
public Person FindByName(列表,字符串名称)
{
return list.Find(p=>p.Name==Name);//捕获“Name”变量
}
这本书还有更多的内容

虽然将委托传递到方法在C#2.0和.NET 2.0中并不常见,但它是LINQ的一个重要基础-因此您倾向于在C#3.0和.NET 3.5中大量使用它。

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

string delegate(TypeOfX x)
{
  return x.ToString();
}

我知道我宁愿打哪一种…

我就是这么想的。它比直接调用ToString有什么帮助呢?它本身没有帮助。这取决于您在其中使用它的上下文。大卫:假设您要将整数列表转换为字符串列表。您可以编写一个通用转换例程,但它需要一个委托来应用于列表中的每个值,而lambda表达式可以更容易地指定该委托。
string delegate(TypeOfX x)
{
  return x.ToString();
}
SomeMethod(x => x.ToString());

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