2012-05-04 11 views
5

Estaba leyendo Tirando del interruptor here y encontré este código.¿Qué significa() => {}?

¿Puede alguien explicar qué es () => {} y qué debo leer para entender esa línea de código?

var moveMap = new Dictionary<string, Action>() 
{ 
    {"Up", MoveUp}, 
    {"Down", MoveDown}, 
    {"Left", MoveLeft}, 
    {"Right", MoveRight}, 
    {"Combo",() => { MoveUp(); MoveUp(); MoveDown(); MoveDown(); }} 
}; 

moveMap[move](); 
+0

Esta es una expresión Lambda, eche un vistazo a [MSDN] (http://msdn.microsoft.com/en-us/library/bb397687.aspx) para obtener más información. – MatthiasG

Respuesta

9

Es un lambda expression:

Todas las expresiones lambda utilizan el operador lambda =>, que se lee como "va a". El lado izquierdo del operador lambda especifica los parámetros de entrada (si los hay) y el lateral derecho titular del bloque de expresión o declaración

Básicamente usted está construyendo una nueva función, temporal aquí que sólo llama a una combinación de dos de las otras funciones.

Como se ve arriba, el () en el lado izquierdo significa que tiene una lista de parámetros vacía (al igual que sus otras funciones). El {} a la derecha significa que ejecuta varias instrucciones dentro de un bloque, lo que lo convierte en una "instrucción lambda" que se llama para sus efectos secundarios, en contraste con una "expresión lambda", que calcula un valor.

+3

Si no es anónimo, no es un lambda. Sólo digo'. – tdammers

+0

@tdammers: Jeje, tienes un punto allí. –

+0

Editado: en realidad, no llama a las otras 4 funciones, sino a 2 de ellas dos veces cada una ... –

4

Es un lambda expression. MSDN se refiere a ella como una "declaración lambda":

Un comunicado lambda se asemeja a una expresión lambda, excepto que la declaración (s) está encerrada entre llaves.

El diccionario contiene un conjunto de Actions (delegados). 4 están explícitamente definidos, y el 5 es una función anónima que llama a 2 de los otros. La última línea de código invoca una Acción (recupera el delegado del diccionario por clave y lo invoca).

4

() => {/*code*/} es una expresión lambda, una forma conveniente de crear un delegado anónimo que no requiere ningún parámetro. Básicamente, crea una pieza de código que se puede llamar y que en su caso se mueve dos veces hacia arriba y luego baja dos veces.

Usted no está limitado a lambdas sin parámetros - se puede crear otras con argumentos:

Action<string> callable = (name) => {Console.WriteLine("Hello, {0}!", s);}; 
callable("world"); 
callable("quick brown fox"); 
3

() esto es función anónima sin parámetros

=> es el operador lambda (pronunciar a medida que pasa a)

El diccionario se ha inicializado con KeyValuePair, la última opción es una función anónima que no toma ningún parámetro e invoca otras funciones