Me preguntaba si puede crear una matriz o una lista <> que contenga métodos. No quiero usar un interruptor o muchas declaraciones if.Matriz que contiene métodos
Gracias
Me preguntaba si puede crear una matriz o una lista <> que contenga métodos. No quiero usar un interruptor o muchas declaraciones if.Matriz que contiene métodos
Gracias
Sí, es posible tener una matriz o lista de este tipo. Dependiendo del número de parámetros de entrada o de salida, que tendría que utilizar algo así como
List<Func<T1, T2, TReturn>>
una instancia de tipo Func<T1, T2, TReturn>
es un método como
TResult MyFunction(T1 input1, T2 input2)
Hay que ir
List<Action> list = new List<Action>();
list.Add(() => ClassA.MethodX(paramM));
list.Add(() => ClassB.MethodY(paramN, ...));
foreach (Action a in list) {
a.Invoke();
}
¿Por qué está el 'Invoke()' aquí? ¿No puedes hacer 'a()'? –
@ Vilx- Sí, puedes usar 'a()'. Y no necesita una pesada 'Lista
explica lo que quieres decir con ListT –
Si usted está tratando de reemplazar un interruptor luego un diccionario podría ser más útil que una lista
var methods = new Dictionary<string, Action>()
{
{"method1",() => method1() },
{"method2",() => method2() }
};
methods["method2"]();
Considero que este y el interruptor de declaraciones un olor de código y que a menudo pueden ser replaced by polymorphism.
Eso depende de dónde quieras usar esto. ¿Qué pasa si intentas implementar el patrón de comando? Está perfectamente bien en tal caso. (también es mejor usar una lista) –
¿Por qué es mejor usar una lista? –
Dado que con el patrón de comando normalmente desea recorrer las devoluciones de llamada –
Tal vez usted quiere probar este u si no desea utilizar listas
public Action[] methods;
private void methodsInArray()
{
methods= new Action[2];
methods[0] = test ;
methods[1] = test1;
}
private void test()
{
//your code
}
private void test1()
{
//your code
}
C# - ver el título –
posible duplicado de [Cómo almacenar los delegados en una lista] (http: // stackoverflow. com/questions/3813261/how-to-store-deletes-in-a-list) – xanatos