2010-12-19 22 views

Respuesta

17

Parece que desea guardar un Func en una variable para su uso posterior. Echar un vistazo a los ejemplos here:

using System; 

public class GenericFunc 
{ 
    public static void Main() 
    { 
     // Instantiate delegate to reference UppercaseString method 
     Func<string, string> convertMethod = UppercaseString; 
     string name = "Dakota"; 
     // Use delegate instance to call UppercaseString method 
     Console.WriteLine(convertMethod(name)); 
    } 

    private static string UppercaseString(string inputString) 
    { 
     return inputString.ToUpper(); 
    } 
} 

ver cómo el método de UppercaseString se guarda en una variable llamada convertMethod que puede luego ser llamado: convertMethod(name).

+0

Supongo que podría hacer eso. Pero luego estaría bloqueado para tener un máximo de 4 parámetros, si tuviera que usar el método Func <>, que sería el preferido. Probablemente podría usar esto, pero estaría bien si pudiera superar el límite. –

+0

@Ruirize: Interesante, nunca me había topado con ese límite antes, así que supongo que nunca lo he sabido. Parece que ya se ha tratado aquí antes, por lo que deberíamos echar un vistazo a ambos: http://stackoverflow.com/questions/3582866/func-for-5-arguments – David

+0

¡Eso suena genial! Aunque, si tengo que hacer muchos de estos para cada unidad, probablemente solo use mi intérprete de Lua. –

0

Debe conocer la firma de la función y crear un delegate.

Hay delegados listos for functions that return a value y for functions that have a void return type. Los dos enlaces anteriores apuntan a tipos genéricos que pueden tomar hasta 15 tipos de argumentos (por lo tanto, pueden servir para funciones que toman tantos argumentos).

Si tiene la intención de utilizar referencias a funciones en un alcance mayor que un ámbito local, puede considerar defining your own custom delegates. Pero la mayoría de las veces, Action y Func lo hacen muy bien.

Actualización:

Tome un vistazo a this question con respecto a la posibilidad de elegir entre la definición de sus propios delegados o no.

1

¿Está buscando Delegates?

+0

Se consideraron los delegados, pero probablemente tendré más de 400 en el futuro, y no todos usarán la misma firma o tipo de devolución. –

0

Uso de delegados

void Foo(bool foobar) 
    { 
/* method implementation */ 
    } 

utilizando Action delegado

Public Action<bool> Bar; 
Bar = Foo; 

Llame a la función;

bool foobar = true; 
Bar(foobar); 
Cuestiones relacionadas