2009-10-28 2 views
5

J'ai récemment posé une question ici, et quelqu'un fourni cette réponse:Quel est le symbole "=>" faisant après ma méthode dans ce code 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'est-ce que => faire? C'est la première fois que je vois ça.

+0

Opérateur Lambda. D'après ce que j'ai lu, il est prononcé "va à" quand on parle à haute voix (juste comme une note de côté). –

+1

http://msdn.microsoft.com/en-us/library/bb397687.aspx pour plus d'informations .... –

Répondre

10

Fondamentalement, il dit: « Je vous donne ce (s,b) » et vous me retournais s*b ou quelque chose et si vous utilisez lambda avec des expressions, mais il peut être quelque chose comme ceci: je vous donne ce (s,b) et faire quelque chose avec les dans le bloc de déclaration comme:

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

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

Une expression Lambda est une méthode sans nom écrite à la place d'une instance de délégué. Le compilateur convertit immédiatement l'expression lambda soit:

  • Une instance de délégué
  • Une expression Arbre

delegate int Transformer(int i);

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

} 

Nous pourrions réécrire comme ceci:

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;} 
} 

une expression lambda a la forme suivante:

(parameters) => expression or statement-block

Dans l'exemple précédent il y avait un seul paramètre, x, et l'expression est x*x

dans notre exemple, x correspond au paramètre i, et l'expression x*x correspond au type de retour int, donc compatible avec le délégué Transformer;

delegate int Transformer (int i);

Un code d'expression lambda peut être un bloc d'instruction au lieu d'une expression. Nous pouvons réécrire notre exemple comme suit:

x => {return x*x;} 

Un arbre d'expression, de type Expression<T>, ce qui représente le code dans l'expression de lamda dans un modèle d'objet traversable.Cela permet à l'expression lambda d'être interprétée ultérieurement lors de l'exécution (Veuillez vérifier l'expression de requête pour LINQ)

19

C'est l'opérateur lambda. Vous définissez une fonction anonyme qui prend deux arguments (s, args) (les spécificateurs de type sont omis), et le corps de cette fonction est ce qui apparaît après le symbole =>.

Il est conceptuellement la même chose que ceci:

... 
client.DownloadStringCompleted += Foo; 
} 

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

Le => est le Lambda Operator. C'est un petit gars pratique qui peut aider à rendre votre code plus lisible et moins encombré.