拿這個例子:
var person = GetRandomPerson();
string firstname = person.Select(a => a.FirstName);
據我所知,這是語法困難。但在這種情況下,a
是person
變量。既然你可以在lambda表達式自由選擇這個名字,它變得更容易理解是這樣的:
string firstname = person.Select(person => person.FirstName);
請記住,還有就是person
變量和person
拉姆達聲明(無論它被稱爲之間沒有聯繫)。如果您願意,您可以選擇完全不同的名稱。
a
或person
部分在=>
之前基本上是一個聲明。
如果你想在詞(如你問):a => a.FirstName
等同於「如果我的項目被稱爲‘A’,那麼請給我的‘A’的名字」
這是什麼情況在一個單獨的情況下(即只有一個人從中選擇一個字段)。
現在如果您持有人員列表會發生什麼?
var persons = GetRandomPersons();
List<string> firstnames = persons.Select(a => a.FirstName);
如果你的基本項目(persons
)是項目的集合,該a
點向每個單個對象。
爲了使其更容易理解:
List<string> firstnames = persons.Select(aSinglePerson => aSinglePerson.FirstName);
此代碼返回每個人的名字。假設它是string
,這意味着將返回IEnumerable<string>
。
它認爲這樣做同樣具有foreach
:
foreach (var aSinglePerson in persons)
{
var firstname = aSinglePerson.FirstName;
...
如果你想在詞(如你問):對於多個項目,a => a.FirstName
等同於「在此集合,依次把每個別項目,稱之爲'a',並請給我'a'的名字「
我希望這解釋了C#語法中lambda表達式背後的概念。
也許「映射到」? – Rawling
得到'a'並返回'b + c'?你的lambda不是很好的例子。讓我們設想一下'a => a.ToString()',它具有「get'a'和返回字符串表示形式'a''的含義。 – Dmitry
a是函數b + c?這種方式,它保持與你的vb.net經驗 –