2010-09-02 10 views
28

J'ai lu cette ligne intéressante here, dans une réponse de Jon Skeet.Signification de() => Opérateur en C#, s'il existe

La ligne intéressante est celui-ci où il a préconisé l'aide d'un délégué:

Log.Info("I did something: {0}",() => action.GenerateDescription()); 

La question est, quel est ce() => opérateur, je me demande? J'ai essayé de le googler, mais comme il est fait de symboles Google ne pouvait pas vraiment être d'une grande aide. Ai-je manqué quelque chose de manière embarrassante?

+2

Notez que grammaticalement est le => qui est l'opérateur et le() et l'expression qui sont ses opérandes. C'est un opérateur étrange; la plupart des opérateurs binaires prennent deux expressions, pas une liste d'arguments et une expression-ou-bloc. –

Répondre

46

Cela introduit une fonction lambda (délégué anonyme) sans paramètre, il est équivalent à et essentiellement sténographie pour:

delegate void() { return action.GenerateDescription(); } 

Vous pouvez ajouter également des paramètres, donc:

(a, b) => a + b 

C'est à peu près équivalent à:

delegate int (int a, int b) { return a + b; } 
+4

Probablement 'return action.GenerateDescription();', non? – abatishchev

+0

@abatishchev: Merci, corrigé. –

+2

En gros, en effet. Pour ma série sur quelques-unes des différences subtiles entre la syntaxe lambda et la syntaxe de la méthode anonyme, commencez ici: http://blogs.msdn.com/b/ericlippert/archive/2007/01/10/lambda-expressions-vs-anonymous -methods-part-one.aspx –

2

Création d'un délégué anonyme à la méthode spécifiée.

Probablement, dans votre cas, il sera un Func<string>

3

Ceci est un exemple d'expression lambda que vous pouvez apprendre plus here.

+0

Encore mieux que de passer au crible SO est d'aller directement à la source: http://msdn.microsoft.com/en-us/library/bb397687.aspx –

1

Il est moyen de passer le délégué anonyme sans paramètres en tant qu'expression lambda.

similaires à ceci de .NET 2.0

Log.Info("I did something: {0}", delegate() 
      { 
       return action.GenerateDescription(); 
      }); 
+0

Probablement 'return action.GenerateDescription();', non? Sinon erreur "Impossible de jeter void à la chaîne", quelque chose comme ça – abatishchev

+0

@abatishchev, probablement oui. Je l'ai écrit du haut de ma tête, donc je ne suis pas sûr que ça compile même. – PiRX

+0

Pourriez-vous s'il vous plaît essayer et si cela va échouer - modifier votre poste s'il vous plaît?) – abatishchev

6

« => » c'est l'opérateur lambda, quand on n'a pas de paramètres d'entrée que nous utilisons juste entre parenthèses avant l'opérateur lambda.

syntaxe: (paramètres d'entrée) => expression