2010-04-28 62 views
13

我正在觀看Silverlight教程視頻,在示例代碼中我遇到了一個不熟悉的表達式 。什麼是'=>'? (C#語法問題)

什麼是=>? 它叫什麼名字?你能給我一個鏈接嗎? 我無法搜索它,因爲它們是特殊字符。

代碼:

 var ctx = new EventManagerDomainContext(); 
     ctx.Events.Add(newEvent); 
     ctx.SubmitChanges((op) => 
     { 
      if (!op.HasError) 
      { 
       NavigateToEditEvent(newEvent.EventID); 
      } 
     }, null); 
+0

如果lambda上只有一個參數,那麼這些額外的零食就會給我一個折角, – 2010-04-28 07:26:00

+2

,您可以省略括號。 '(op)=>'可以縮短爲'op =>' – 2010-04-28 07:28:05

+0

這是一個C#** lambda表達式**。你可以閱讀所有關於[這裏](http://msdn.microsoft.com/en-us/library/bb397687.aspx)。 – 2010-04-28 07:20:00

回答

11

Lambda operator

lambda表達式是一個anonymous function,可以用它來創建delegatesexpression tree類型。通過使用lambda表達式,您可以編寫可作爲參數傳遞或作爲函數調用值返回的本地函數...

Huzzah!

+0

Lambda總是讓我想起lisp,這是我用lambda表達式學習的第一種語言。 – Patrick 2010-04-28 07:31:34

+0

@Patrick因爲Lisp很大程度上基於lambda演算http://en.wikipedia.org/wiki/Lambda_calculus,這也是該運算符的名字來自 – AakashM 2010-04-28 07:55:39

14

這是一個lambda expression

如果您熟悉C#2中的匿名方法,lambda表達式大部分是相似的,但更簡潔。所以,你已經得到了代碼可以這樣寫與匿名方法:

var ctx = new EventManagerDomainContext(); 
ctx.Events.Add(newEvent); 
ctx.SubmitChanges(delegate(Operation op) 
{ 
    if (!op.HasError) 
    { 
     NavigateToEditEvent(newEvent.EventID); 
    } 
}, null); 

方面的匿名方法,如拍攝變量的行爲相同的方式工作lambda表達式。 Lambda表達式和匿名方法統稱爲匿名函數

有一些區別,但是:

  • Lambda表達式可以轉化爲expression trees,以及與會代表。
  • Lambda表達式有一些快捷方式,使其更加簡潔:

    • 如果編譯器可以推斷參數類型,你不必指定他們
    • 如果身體是一個單獨的語句,你不需要把它放在括號,你可以省略return語句的「迴歸」部分
    • 如果你有一個推斷類型的單個參數,你可以錯過括號

    一起把這些,你得到的東西,如:

    IEnumerable<string> names = people.Select(person => person.Name); 
    
  • Lambda表達式支持「我不在乎有多少參數有」的匿名方法,例如形式

    EventHandler x = delegate { Console.WriteLine("I was called"); }; 
    
1

我不能尋找它,因爲它們是特殊字符。

有時老式的方式是最好的。這爲我工作:

  • 啓動Visual Studio 2008或更高版本
  • 命中F1
  • 一旦幫助文檔瀏覽器已經拿出,確保Index選項卡在左側窗格中選擇
  • 輸入=>在查找字段
  • 列表中的第一項現在是您需要的幫助文章。
+2

哦! :-)但是,真的,有時我認爲人們通過宏觀F1鍵來打開SO – Patrick 2010-04-28 07:34:06