2011-02-08 29 views
26

Me gustaría saber cuál es la diferencia. Actualmente estoy aprendiendo estas cosas y me parece como estos son los mismos:Expresión Lambda versus métodos anónimos

delegate void X(); 

X instanceOfX; 

instanceOfX = delegate() { code }; 

instanceOfX =() => { code }; 

Además, si el lambda son más recientes, debería utilizar sólo lambda y se olvidan de los métodos anónimos?

+3

Piense en términos de evolución del lenguaje. En C# 1, tuvimos delegados. En C# 2, agregaron métodos anónimos. C# 3 agregó lambdas. Maneras más fáciles de realizar tareas similares. Para obtener más información sobre la evolución, lo invito a consultar el libro * C# In Depth *. –

Respuesta

3

La única diferencia es que la lambda se puede convertir fácilmente en Expression<Func<void>>. Los delegados son simplemente métodos/cierres, pero el lambda también se divide en un árbol de expresiones:

Expression<Func<int, int>> expr = x => x*2; // Expression tree 
Func<int, int> fun = x => x*2;    // function 
delegate int MyDelegate(int x); 
MyDelegate del = x => x*2;    // Same as function, delegate 
+1

Tenga en cuenta que esto solo es posible para un subconjunto de lamdas: Expression-lamdas pero no instrucción lamdas. – CodesInChaos

+3

Tenga en cuenta que "Delegar" es un nombre terrible para un tipo de delegado, ya que se confundirá fácilmente con System.Delegate, su clase base. –

+3

Me disculpo. Todavía estoy bebiendo café esta mañana y honestamente no podía pensar en otro nombre – kelloti

Cuestiones relacionadas