2010-04-28 14 views
13

Estaba viendo un video tutorial de Silverlight, y me encontré con una expresión desconocida en el código de ejemplo.¿Qué es '=>'? (Pregunta de gramática C#)

¿Qué es =>? ¿cuál es su nombre? ¿podría proporcionarme un enlace? No pude buscarlo porque son caracteres especiales.

código:

 var ctx = new EventManagerDomainContext(); 
     ctx.Events.Add(newEvent); 
     ctx.SubmitChanges((op) => 
     { 
      if (!op.HasError) 
      { 
       NavigateToEditEvent(newEvent.EventID); 
      } 
     }, null); 
+0

esos parens adicionales me dan los jibblies –

+2

si solo hay un parámetro en lambda, puede omitir el paréntesis. '(op) =>' puede acortarse a 'op =>' –

+0

Es una expresión lambda C# **. Puede leer todo sobre ellos [aquí] (http://msdn.microsoft.com/en-us/library/bb397687.aspx). –

Respuesta

11

Lambda operator:

Una expresión lambda es un anonymous function que se puede utilizar para crear delegates o expression tree tipos. Al usar expresiones lambda, puede escribir funciones locales que se pueden pasar como argumentos o devolver como el valor de las llamadas a funciones ...

¡Hurra!

+0

Lambda siempre me hace pensar en lisp, el primer idioma que aprendí con expresiones lambda. – Patrick

+0

@Patrick porque Lisp se basa en gran medida en el cálculo lambda http://en.wikipedia.org/wiki/Lambda_calculus, que también es donde el nombre de este operador proviene del – AakashM

14

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"); }; 
    
1

no podía buscarlo porque son caracteres especiales.

A veces las formas anticuadas son las mejores. Esto funcionó para mí:

  • Inicie Visual Studio 2008 o posterior
  • Hit F1
  • Una vez que el Explorador de documento de ayuda ha llegado, garantizar la pestaña Index se selecciona en el panel de la izquierda
  • Introduzca => en el campo Buscar
  • El primer elemento de la lista ahora es el artículo de ayuda que necesita.
+2

¡Oh, chasquido! :-) Pero realmente, a veces creo que la gente macroes su clave F1 para abrir SO en su lugar – Patrick