2011-07-28 24 views
14

Soy un nuevo C#. Solo estoy jugando con eso. No para un propósito real.Lambda Función anónima como parámetro

void makeOutput(int _param) 
{ 
    Console.WriteLine(_param.ToString()); 
} 

//... 
// Somewhere in a code 
{ 
    makeOutput( /* some not c# code for an example for what do I want */ function : int() { return 0; } ); 
} 

¿Es posible utilizar funciones anónimas REALES (significa devolver el resultado)?

no quiero utilizar delegados como

// Somewhere in a code 
{ 
    Func<int> x =() => { return 0; }; 

    makeOutput(x()) 
} 

También yo no quiero cambiar el método de tipo de parámetro como

void makeOutput(Func<int> _param) 
{ 
} 

Eso es decisión muy común.


Todo está bien. Solo entendí que quería cosas imposibles. Quería declarar la función anónima y ejecutarla en el mismo lugar. Nota: declarando DIRECTO y llamada DIRECTA sin contenedor genérico.

// flash-like (as3) code /// DOES NOT COMPILE 
makeOutput( (function : int(){ return 0; })() ); 
+1

No entiendo la pregunta. ¿Puedes reformular o usar algún psudocódigo? –

+0

¿Por qué no quieres cambiar el tipo de parámetro? – SLaks

+0

¿Porque podría querer usar simplemente un 'int' a veces? – Vercas

Respuesta

30

Sí.
Se llama un delegado.

Los delegados son (más o menos) tipos normales; puede pasarlos a funciones como cualquier otro tipo.

void makeOutput(Func<int> param) { 
    Console.WriteLine(param()); 
} 

makeOutput(delegate { return 4; }); 
makeOutput(() => { return 4; }); 
makeOutput(() => 4); 

Su edición pregunta ed no tiene sentido.

C# es seguro.
Si el método no quiere una función como parámetro, no puede asignarle un método como parámetro.

5
void makeOutput(Func<int> _param) 
{ 
    makeOutput(_param()); 
} 

void makeOutput(int _param) 
{ 
    Console.WriteLine(_param.ToString()); 
} 

Esto puede hacer el truco!
Es la manera más simple: ¡sobrecargar!

+0

@Focker ¿Esto ayuda? – Vercas

4

tuve un problema similar y amigo me mostró el camino:

makeOutput((new Func<Int32>(() => { return 0; })).Invoke()); 

la esperanza que esto ayudará

Cuestiones relacionadas