2009-10-28 17 views
5

最近,我問了一個問題在這裏,有人提供了這樣的回答:在這個C#代碼中,我的方法在做什麼符號「=>」?

private void button1_Click(object sender, EventArgs e) 
{ 
    var client = new WebClient(); 
    Uri X = new Uri("http://www.google.com"); 

    client.DownloadStringCompleted += (s, args) => //THIS, WHAT IS IT DOING? 
    { 
     if (args.Error == null && !args.Cancelled) 
     { 
      MessageBox.Show(); 
     } 
    }; 

    client.DownloadStringAsync(X); 
} 

那是什麼=>在做什麼?這是我第一次看到這個。

+0

Lambda運算符。根據我讀過的內容,當大聲說出時,它會變成「去」(就像旁註一樣)。 – 2009-10-28 23:05:56

+1

http://msdn.microsoft.com/en-us/library/bb397687.aspx更多信息.... – 2009-10-28 23:07:06

回答

10

基本上它說:「我給你這個(s,b)」,你正在返回我s*b或東西,如果你正在使用拉姆達與表達,但它可以是這樣的:我給你這個(s,b),做一些與他們喜歡語句塊:

{ 
    int k = a+b; 
    k = Math.Blah(k); 
    return k; 
} 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~

A Lambda表達式是一個代替委託實例編寫的未命名方法。編譯器立即lambda表達式轉換爲兩種:

  • 一個代表實例
  • 表達式樹

delegate int Transformer(int i);

class Test{ 
    static void Main(){ 
    Transformer square = x => x*x; 
    Console.WriteLine(square(3)); 
    } 

} 

,我們可以把它像這樣:

delegate int Transformer(int i);

class Test{ 
    static void Main(){ 
    Transformer square = Square; 
    Console.WriteLine(square(3)); 
    } 
    static int Square (int x) {return x*x;} 
} 

lambda表達式具有以下形式:

(parameters) => expression or statement-block

在前面的例子中有一個單一的參數,x,表達式是x*x

在我們的例子中,x對應

到參數i,並且表達式x*x對應於返回類型int,因此與Transformer委託相兼容;

delegate int Transformer (int i);

lambda表達式的代碼可以是一個語句塊代替的表達。我們可以重寫我們的例子如下:

x => {return x*x;} 

表達式樹,Expression<T>類型的,代表可橫越對象模型中的λ表達式內的代碼。這允許稍後在運行時解釋lambda表達式(請檢查LINQ的「查詢表達式」)

19

這是lambda運算符。您定義了一個匿名函數,它接受兩個參數(s,args)(省略了類型說明符),並且所述函數的主體是出現在=>符號後面的內容。

它在概念上與此相同:

... 
client.DownloadStringCompleted += Foo; 
} 

void Foo(object sender, EventArgs args) 
{ 
    if (args.Error == null && !args.Cancelled) 
    { 
     MessageBox.Show(); 
    } 
}; 
6

的=>是Lambda Operator。這是一個方便的小傢伙,可以幫助您使代碼更具可讀性,更簡潔。