2009-01-29 7 views
5

Puis-je créer dynamiquement une fonction et l'appeler (en lui transmettant des valeurs) dans une ligne de code?Créer une fonction et l'appeler dans une ligne de code C#

Je cherchais un moyen qui pourrait me permettre de créer une fonction anonyme et de l'appeler directement. Triez de:

delegate(string aa){ MessageBox.show(aa); }("Hello World!"); 

ou quelque chose comme ça (je sais que le code ci-dessus ne compile pas, mais je voulais quelque chose près).

+0

S'il vous plaît expliquer pourquoi vous voulez faire. –

+1

Je ne veux pas encombrer mon en-tête de classe en introduisant une autre déclaration. –

+0

Pourquoi ne pas simplement utiliser du vieux code en ligne? Aussi, je ne peux pas vraiment voir comment une méthode privée pourrait être un gros problème. –

Répondre

17
new Action<int>(x => Console.WriteLine(x))(3); 

ce n'est pas si lisible mais répondant à votre question, vous pouvez certainement.

EDIT: juste remarqué que vous il etiquettée comme C# 2.0, la réponse est au-dessus de 3,5, pour 2.0, il serait

new Action<int>(delegate(int x) { Console.WriteLine(x); })(3); 
+0

Merci .. il semble y avoir une erreur mineure si ... Ne devrait-il pas être nouvelle Action (delegate (string x) {Console.WriteLine (x)}). Invoke ("Hello World"); // J'ai utilisé delegate à la place. –

+0

dans 3.5 œuvres (je l'ai vérifié), en 2.0, vous devez écrire comme vous l'avez suggéré –

+0

ok juste vu qu'il est marqué C# 2.0 J'ai corrigé ma réponse –

1

Pour créer un délégué d'utilisation de méthode anonyme:

delegate(...your arguments...) { ...your code... }; 

Edit: Après la réponse de la question a été révisée est plus précise.

+0

Diminuer une réponse qui est incorrecte APRÈS que la question a été révisée/modifiée ne me semble pas comment le vote devrait fonctionner. –

+0

@CKret: bienvenue sur Internet, où les gens vous downvote sans raison, tout le temps! ;) J'ai upvoted votre réponse cependant. –

+0

Merci et merci. ;) –

8

Le .Invoke est en fait pas nécessaire; vous pouvez simplement écrire:

new Action<int>(x => Console.WriteLine(x))(3); 

ou pour C# 2.0:

new Action<int>(delegate(int x) { Console.WriteLine(x); })(3); 
+0

gentil, ne le savais pas. –

Questions connexes