2014-04-22 58 views
4

我是一個VB.NET程序員,他也知道一些C#。我最近遇到lambda表達式這in VB can look like this如何將lambda表達式翻譯成英文?

a = Function() b + c 

然而in C# they look like this

a => b + c; 

(其中,對我來說,看起來很像從C離奇的指針表達式)

的問題是,當閱讀C#代碼時,我會將操作符轉換成英文單詞。因此a = b + c;變成「添加b和c並分配給a」。然而,在我的內置解析器中,對於=>運算符,我還沒有精神翻譯,因此a => b + c;變成「指向b和c的等號指針」,這是沒有意義的,或者「a是b和c的lambda」,這是可怕的。

我確定語言創建者的意思是爲那個操作員提供一個概念,並且這個概念應該能夠被縮減爲一個單詞或者很短的短語。

那麼=>運營商的英文翻譯是什麼意思?

p.s.請注意,我試圖讓示例儘可能簡單,以免陷入具體情況。

+2

也許「映射到」? – Rawling

+0

得到'a'並返回'b + c'?你的lambda不是很好的例子。讓我們設想一下'a => a.ToString()',它具有「get'a'和返回字符串表示形式'a''的含義。 – Dmitry

+0

a是函數b + c?這種方式,它保持與你的vb.net經驗 –

回答

5

'a returns b plus c'?

1

拿這個例子:

var person = GetRandomPerson(); 

string firstname = person.Select(a => a.FirstName); 

據我所知,這是語法困難。但在這種情況下,aperson變量。既然你可以在lambda表達式自由選擇這個名字,它變得更容易理解是這樣的:

string firstname = person.Select(person => person.FirstName); 

請記住,還有就是person變量和person拉姆達聲明(無論它被稱爲之間沒有聯繫)。如果您願意,您可以選擇完全不同的名稱。

aperson部分在=>之前基本上是一個聲明。

如果你想在詞(如你問):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表達式背後的概念。

3

在數學中=>符號表示Implies但由於某些原因,c#將其稱爲Lambda operator。這不會是容易理解爲a LAMBDA操作bc

所以,你可以簡單地調用a意味着bc

5

你有你的例子稍有不妥。

此VB代碼

a = Function() 
    Return b + c 
End Function 

看起來像在C#:

Func<int> a =() => b + c; 

與調用=>「收益」的建議的問題是,這不符合工作lambda表達式,唐」 T迴流什麼:

例如:

Action a =() => Console.WriteLine("Test"); 

如果您在該場景中致電=>「返回」,我想這會有點令人困惑。

通常,用於=>的術語是「前往」,但有些人說「映射到」或(在用作謂詞的lambda的情況下)「這樣的」。

我的個人偏好是「映射到」(正如OP的第一個回覆中所建議的那樣)。

+0

+1「這樣的」,並通常全面的答案。正如你所提到的那樣,因爲我主要在謂詞中使用lambda表達式,「這樣的」有很大的意義,但其他情況並不那麼重要。 – helrich

2

我總是認爲「自我去」。

1

按定義in =>被稱爲lambda算子。你用來分開lambda體(在右邊)的輸入(左邊)。你的榜樣不代表同一件事。

在你的情況更有效的將是

a = delegate() { b + c };

,可以使用lambda簡化爲

a =() => b + c;

拉姆達運算符不返回任何東西,它更像是「去「或」使用「。