Mi chiedevo se è possibile creare una matrice o una lista <> che contenga metodi. Non voglio usare un interruttore o un sacco di istruzioni if.Matrice contenente metodi
Grazie
Mi chiedevo se è possibile creare una matrice o una lista <> che contenga metodi. Non voglio usare un interruttore o un sacco di istruzioni if.Matrice contenente metodi
Grazie
Sì, è possibile avere una tale varietà o di un elenco. A seconda del numero di parametri di ingresso o di uscita, utilizza qualcosa come
List<Func<T1, T2, TReturn>>
un'istanza di tipo Func<T1, T2, TReturn>
è un metodo come
TResult MyFunction(T1 input1, T2 input2)
Ci si va
List<Action> list = new List<Action>();
list.Add(() => ClassA.MethodX(paramM));
list.Add(() => ClassB.MethodY(paramN, ...));
foreach (Action a in list) {
a.Invoke();
}
Perché 'Invoke()' qui? Non puoi semplicemente fare 'a()'? –
@ Vilx- Sì, puoi usare 'a()'. E non hai bisogno di un pesante 'Elenco
spiega cosa intendi per ListT –
Se si sta tentando di sostituire un interruttore poi un dizionario potrebbe essere più utile di un elenco
var methods = new Dictionary<string, Action>()
{
{"method1",() => method1() },
{"method2",() => method2() }
};
methods["method2"]();
considero questo e switch un odore di codice e spesso possono essere replaced by polymorphism.
Dipende da dove vuoi usare questo. Cosa succede se si tenta di implementare lo schema di comando? In questo caso è perfettamente soddisfacente. (inoltre è meglio usare una lista) –
Perché è meglio usare una lista? –
Dato che con lo schema di comando in genere si desidera eseguire il ciclo delle chiamate di richiamata –
forse si vuole provare questo se u non vogliono utilizzare gli elenchi
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# - vedere il titolo –
possibile duplicato di [Come conservare i delegati in un elenco] (http: // StackOverflow. it/questions/3813261/how-to-store-delegates-in-a-list) – xanatos