Es un lambda expression.
Si está familiarizado con los métodos anónimos de C# 2, las expresiones lambda son en su mayoría similares pero más concisas. Así que el código que tienes se puede escribir como este con un método anónimo:
var ctx = new EventManagerDomainContext();
ctx.Events.Add(newEvent);
ctx.SubmitChanges(delegate(Operation op)
{
if (!op.HasError)
{
NavigateToEditEvent(newEvent.EventID);
}
}, null);
Aspectos de los métodos anónimos, como el comportamiento de las variables capturadas funcionan de la misma manera para las expresiones lambda. Las expresiones de Lambda y los métodos anónimos se denominan colectivamente funciones anónimas.
Hay algunas diferencias, sin embargo:
- expresiones lambda se pueden convertir en expression trees, así como delegados.
expresiones lambda tienen una serie de atajos para que sean más concisa:
- Si el compilador puede inferir los tipos de parámetros, no es necesario especificarlos
- Si el cuerpo es una sola declaración , no es necesario ponerlo en los apoyos y se puede omitir la parte de "retorno" de una instrucción de retorno
- Si usted tiene un solo parámetro con un tipo inferido, puede perder los soportes
Poner estos juntos, se obtiene cosas como:
IEnumerable<string> names = people.Select(person => person.Name);
Expresiones Lambda no apoyan el "No me importa cuántos parámetros existen" forma de métodos anónimos, por ejemplo,
EventHandler x = delegate { Console.WriteLine("I was called"); };
esos parens adicionales me dan los jibblies –
si solo hay un parámetro en lambda, puede omitir el paréntesis. '(op) =>' puede acortarse a 'op =>' –
Es una expresión lambda C# **. Puede leer todo sobre ellos [aquí] (http://msdn.microsoft.com/en-us/library/bb397687.aspx). –