寻找

2013-02-09 110 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