2009-01-29 4 views
5

¿Puedo crear dinámicamente una función e invocarla (pasando valores a ella) en una línea de código?Crear una función y llamarla en una línea del código C#

Aclaración: Estaba buscando alguna forma que me permitiera crear una función anónima y llamarla directamente. Algo así:

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

o algo así (sé que el código no compila, pero quería algo cercano).

+0

explique por qué desea hacerlo. –

+1

No quiero desordenar el encabezado de mi clase al presentar otra declaración. –

+0

¿Por qué no usar simplemente el código simple en línea? Además, realmente no puedo ver cómo un método privado podría ser un gran problema. –

Respuesta

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

no es tan legible pero al responder a su pregunta, definitivamente puede.

EDIT: acabo de notar que has etiquetado como C# 2.0, la respuesta anterior es de 3.5, 2.0 para la que sería

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

Gracias ... parece que hay un pequeño error ... No debería ser una nueva Acción (delegar (cadena x) {Console.WriteLine (x)}). Invocar ("Hola mundo"); // Utilicé delegado en su lugar. –

+0

en 3.5 obras (lo comprobé), en 2.0 necesita escribir como sugirió –

+0

bien, simplemente vi que está etiquetado C# 2.0, arreglé mi respuesta –

1

Para crear un delegado anónimo uso del método:

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

Editar: Después de la pregunta fue revisado pablitos respuesta es más precisa.

+0

Para rechazar una respuesta que es incorrecta DESPUÉS de que la pregunta fue revisada/modificada, a mí me parece que no es cómo debería funcionar la votación. –

+0

@CKret: ¡bienvenido a Internet, donde la gente lo rechaza sin motivo, todo el tiempo! ;) Sin embargo, he cambiado tu respuesta. –

+0

Gracias y gracias. ;) –

8

El .Invoke realidad no es necesaria; simplemente puede escribir:

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

o para C# 2.0:

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

, una buena, no lo sabía. –

Cuestiones relacionadas