尋找

2013-02-09 146 views
1

我已經從C#有一段路程,現在一個C#語法的名字,我要看書,我有一些代碼很難找到它的意義:尋找

var server = new WebSocketServer("ws://localhost:8181"); 
server.Start(socket => 
{ 
    socket.OnOpen =() => 
    { 
     Console.WriteLine("Open!"); 
     allSockets.Add(socket); 
    }; 
    socket.OnClose =() => 
    { 
     Console.WriteLine("Close!"); 
     allSockets.Remove(socket); 
    }; 
    socket.OnMessage = message => 
    { 
     Console.WriteLine(message); 
     allSockets.ToList().ForEach(s => s.Send("Echo: " + message)); 
    }; 
}); 

socket => { .. }語法的名稱是什麼,我可以在哪裏找到它的一些文本?它引入了哪個版本的C#? =() => { .. }是一樣的嗎?

+0

這是一個lambda表達式,匿名委託。 – 2013-02-09 12:38:18

+0

你的意思是「匿名方法」。 – 2013-02-09 12:45:20

+0

我只能說這是一個非常難看的語法! – Mehran 2013-02-09 12:54:44

回答

4

這是一個lambda表達式,基本上它是定義代表的快捷方式,這是非常方法。它與LINQ一起在C#3中引入,使其用法更爲簡單。語法是如下:

parameters => body 

通常編譯器可以以某種方式推斷出參數的類型,這就是爲什麼你看到的僅僅是參數的名稱。

+1

代表是*參考*方法;他們實際上不是方法。委託可以引用常規方法或匿名方法。不過,lambda表達式是一種匿名方法。 – 2013-02-09 12:43:36

+0

@MatthewWatson lambdas也是引用,我只是想保持我的回答簡單 – BlackBear 2013-02-09 12:47:41

+0

呃,他們不是 - 他們是方法,但你可以創建一個委託來存儲對他們的引用。 http://msdn.microsoft.com/en-gb/library/bb397687.aspx – 2013-02-09 13:12:43