Las reglas son:
Una expresión lambda tiene la forma
(modifier type parameter, modifier type parameter ...) => { statements }
Primero veamos el lado izquierdo.
El modificador puede ser ref, out o nada en absoluto.
Si no hay modificadores ref o out, se pueden eludir todos los tipos. Si hay cualquier ref o modificadores entonces cada declaración de parámetro debe tener un tipo declarado.Si cualquier parámetro tiene un tipo declarado, entonces cada parámetro debe tener un tipo declarado. Por lo tanto, puede elide los tipos siempre que (1) no haya referencias o salidas, y (2) elide todos de ellos. De lo contrario, debe proporcionar todos los tipos.
Si hay exactamente un parámetro y su tipo ha sido elidido, entonces los paréntesis alrededor de la lista de parámetros pueden ser también eliminados.
Estas son todas las reglas sobre las listas de parámetros. Las reglas sobre el lado derecho son:
si la lista de sentencias consiste en una sola instrucción de retorno con una expresión:
x => { return x + 1; }
continuación, las llaves, la palabra clave de retorno y coma pueden elided:
x => x + 1
Además, si la lista de instrucciones consta de una sola declaración que es una expresión de extracto:
x => { x++; } // Not returning the value of x++; only useful for the side effects
x => { new Y(x); } // weird! executing a ctor only for its side effects! But legal!
x => { M(x); } // note, not returning the value of M(x) even if there is one.
entonces también es legal para eludir los aparatos ortopédicos y coma:
x => x++
x => new Y(x)
x => M(x)
Tenga en cuenta que estos ahora potencialmente significan algo diferente para el lector! Antes estábamos claramente descartando los valores de retorno; ahora las lambdas se leerán como devolviéndolas.
Tenga en cuenta que esto significa que es legal hacer este truco con los métodos de devolución de nulo. Esto es realmente legal:
x => Console.WriteLine(x)
Yuck. No hagas eso. Si se refiere a
x => { Console.WriteLine(x); }
diga que en su lugar. El primero parece demasiado como si estuvieras tratando de decir
x => { return Console.WriteLine(x); }
que, por supuesto, sería ilegal.
¿Se refiere a aparatos ortopédicos, soportes o ambos? Muchas interpretaciones: http://en.wikipedia.org/wiki/Bracket Lista de argumentos, cuerpo del código o ambos (toda la expresión? –
'{}' son llaves, '()' son paréntesis, y '[]' son corchetes (en el lenguaje de programación). – Donnie
Lo siento, no estaba claro acerca de los diferentes significados de las palabras llaves, paréntesis y corchetes. En realidad me refería a {} y() – LLS