2009-10-28 19 views
5

Hace poco hizo una pregunta aquí, y alguien siempre esta respuesta:¿Qué está haciendo el símbolo "=>" después de mi método en este código C#?

private void button1_Click(object sender, EventArgs e) 
{ 
    var client = new WebClient(); 
    Uri X = new Uri("http://www.google.com"); 

    client.DownloadStringCompleted += (s, args) => //THIS, WHAT IS IT DOING? 
    { 
     if (args.Error == null && !args.Cancelled) 
     { 
      MessageBox.Show(); 
     } 
    }; 

    client.DownloadStringAsync(X); 
} 

¿Qué es eso => ​​haciendo? Es la primera vez que veo esto.

+0

Operador lambda. Según lo que he leído, se pronuncia "va hacia" cuando se habla en voz alta (solo como una nota al margen). –

+1

http://msdn.microsoft.com/en-us/library/bb397687.aspx para obtener más información .... –

Respuesta

10

Básicamente se dice "Te estoy dando esta (s,b)" y me están volviendo s*b o algo y si está utilizando lambda con las expresiones, pero puede ser algo como esto: Te estoy dando esta (s,b) y hacer algo con en el bloque de sentencias como:

{ 
    int k = a+b; 
    k = Math.Blah(k); 
    return k; 
} 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~

Una expresión Lambda es un método sin nombre escrito en lugar de una instancia de delegado. El compilador convierte inmediatamente la expresión lambda a cualquiera:

  • Un ejemplo delegado
  • Una expresión Árbol

delegate int Transformer(int i);

class Test{ 
    static void Main(){ 
    Transformer square = x => x*x; 
    Console.WriteLine(square(3)); 
    } 

} 

Podríamos reescribir así:

delegate int Transformer(int i);

class Test{ 
    static void Main(){ 
    Transformer square = Square; 
    Console.WriteLine(square(3)); 
    } 
    static int Square (int x) {return x*x;} 
} 

Una expresión lambda tiene la siguiente forma:

(parameters) => expression or statement-block

En el ejemplo anterior no había un solo parámetro, x, y la expresión es x*x

en nuestro ejemplo, x corresponde al parámetro i, y la expresión x*x corresponde al tipo de retorno int, por lo tanto, es compatible con el delegado de Transformer; código

delegate int Transformer (int i);

Una de expresión lambda puede ser un bloque de instrucciones en lugar de una expresión. Podemos reescribir nuestro ejemplo de la siguiente manera:

x => {return x*x;} 

un árbol de expresión, de tipo Expression<T>, lo que representa el código dentro de la expresión lambda en un modelo de objetos transitable.Esto permite que la expresión lambda se interprete más tarde en el tiempo de ejecución (verifique la "Expresión de consulta" para LINQ)

19

Ese es el operador lambda. Define una función anónima que toma dos argumentos (s, args) (se omiten los especificadores de tipo), y el cuerpo de dicha función es lo que aparece después del símbolo =>.

Es conceptualmente lo mismo que esto:

... 
client.DownloadStringCompleted += Foo; 
} 

void Foo(object sender, EventArgs args) 
{ 
    if (args.Error == null && !args.Cancelled) 
    { 
     MessageBox.Show(); 
    } 
}; 
6

El => es el Lambda Operator. Es un tipo pequeño y práctico que puede ayudarlo a hacer que su código sea más legible y menos abarrotado.

Cuestiones relacionadas