举个例子:
var person = GetRandomPerson()
string firstname = person.Select(a => a.FirstName)
我知道这在语法上很困难。但在这种情况下,a
是 person
变量。由于你可以在 lambda 表达式中自由选择该名称,因此像这样理解会更容易:
string firstname = person.Select(person => person.FirstName)
请记住,
person
变量和
person
lambda声明之间没有任何联系(不管它叫什么)。如果您选择,可以完全选择不同的名称。
在
=>
之前的
a
或
person
部分基本上是一个声明。
如果您想用语言表达出来(就像您要求的那样):
a => a.FirstName
等同于“如果我的项目名为'a',则请给我'a'的FirstName”。
这就是在单个情况下发生的事情(即只有一个人从中选择一个字段)。
那么如果您手头持有一个人员名单会发生什么呢?
var persons = GetRandomPersons()
List<string> firstnames = persons.Select(a => a.FirstName)
如果您的基本项(
persons
)是项目集合,则
a
指向每个单独的对象。
为了使其更易于理解:
List<string> firstnames = persons.Select(aSinglePerson => aSinglePerson.FirstName)
这段代码返回每个人的名字(FirstName)。假设它是一个字符串(string
),那么将返回一个 IEnumerable<string>
。
可以把它想象成用 foreach
循环实现同样的功能:
foreach (var aSinglePerson in persons)
{
var firstname = aSinglePerson.FirstName
...
如果您希望用语言表达(就像您所要求的那样):对于多个项目,
a => a.FirstName
相当于“
在此集合中,按顺序获取每个单独的项目,称其为'a',并请给我'a'的FirstName'”。
我希望这解释了C#语法中lambda表达式的概念。
a
并返回b + c
?你的 lambda 不是一个好的例子。让我们想象一些像a => a.ToString()
这样的东西,它的意思是“获取a
并返回a
的字符串表示形式”。 - Dmitry