2008-11-14 27 views
56

我剛剛在這個論壇的一些問題中談到了這個語法,但Google和其他任何搜索引擎都會阻止搜索中的字母和數字以外的任何內容,因此無法搜索出「=>」。C#中的'=>'語法是什麼意思?

那麼誰能告訴我它是什麼以及它是如何使用的?

+0

[C#Lambda表達式,我爲什麼要使用它?] http://stackoverflow.com/questions/167343/c-sharp-lambda-expression-why-should-i-use-this) – nawfal 2014-07-03 10:07:37

回答

66

這是lambda運算符。

從C#3到C#5,這僅用於lambda expressions。這些基本上是C#2中引入的anonymous methods的較短形式,但也可以轉換爲expression trees

舉個例子:

Func<Person, string> nameProjection = p => p.Name; 

等同於:

Func<Person, string> nameProjection = delegate (Person p) { return p.Name; }; 

在這兩種情況下,你要創建一個委託具有Person參數,返回那個人的名字(作爲一個字符串)。

在C#6中,相同的語法用於表達式成員,例如,

// Expression-bodied property 
public int IsValid => name != null && id != -1; 

// Expression-bodied method 
public int GetHashCode() => id.GetHashCode(); 

參見:

(事實上很多類似的問題 - 嘗試lambdalambda-expressions標籤。)

+0

由於這個問題沒有提到有關被問到的確切情況的任何信息,可能考慮更新這個答案也包含新的表達式bodied成員語法? – 2016-09-23 08:02:25

2

而不是使用匿名方法是這樣的:

somevar.Find(delegate(int n) 
{ 
    if(n < 10) 
     return n; 
}); 

你只是把它寫這樣的:

somevar.Find(n => n < 10); 

這將需要基於返回值的數據類型。

0

這基本上意味着「進入」,就像一個參數

MyObjectReference => MyObjectReference.DoSomething() 

通常你用它們來傳遞功能集成到方法作爲參數,或在LINQ語句

MyCollection.Where(myobj => myobj.Age>10) 

例如。

14

這意味着很棒。對於例如

x => x + 1 

表示以x爲參數並返回它的後繼者的方法。

button.Click += new EventHandler((sender, e) => methodInfo.Invoke(null, new object[] { sender, e })); 

通過調用MethodInfo保存的方法爲事件處理程序分配一個按鈕。

7

這裏是從MSDN

一個簡單的例子
delegate int del(int i); 
del myDelegate = x => x * x; 
int j = myDelegate(5); //j = 25 

任何之前=>的輸入參數,以及任何後表達。您可以有多個輸入參數。 Lambdas主要與Linq一起使用。

0

它是lambda表達式語法的一部分。 lambda表達式本質上是委託或匿名方法的縮寫形式。爲了說明,假設我有一串匹配字母表的字母的字符串。我可以用下列LINQ表達式挑出包含大於「E」值的數組成員:

var someLetters = alphabet.Where(l => l>「E」);

「=>」左邊的lambda表達式的部分標識了測試的變量名稱(設置爲字母表中的各個成員)和lambda表達式右邊的「 =>「標識處理。在這種情況下,處理產生一個布爾值,Where邏輯用來確定每個字母表的成員是否傳遞給someLetters數組。

7

它是函數表示法的另一種形式。以下幾乎相同:

// explicit function 
int MyFunc(int pParam) 
{ 
    return pParam; 
} 

// delegate function 
Func<int, int> MyFunc = delegate(int pParam) { return pParam; }; 

// lambda expression 
Func<int, int> MyFunc = x => x; 

想想一個lambda表達式的意思,「給出一些東西,返回一些東西」。在上例中,函數x => x表示「給定x,返回x」。 (雖然lambda表達式不一定需要返回某些東西,但在這種情況下,您可能會將它們讀爲「給定x,使用x做某事」。)