Ответ 1
Там вы идете
List<Action> list = new List<Action>();
list.Add( () => ClassA.MethodX(paramM) );
list.Add( () => ClassB.MethodY(paramN, ...) );
foreach (Action a in list) {
a.Invoke();
}
Мне было интересно, можно ли создать массив или список < > , содержащий методы. Я не хочу использовать переключатель или множество операторов if.
Спасибо
Там вы идете
List<Action> list = new List<Action>();
list.Add( () => ClassA.MethodX(paramM) );
list.Add( () => ClassB.MethodY(paramN, ...) );
foreach (Action a in list) {
a.Invoke();
}
Да, возможно иметь такой массив или список. В зависимости от количества входных или выходных параметров вы должны использовать что-то вроде
List<Func<T1, T2, TReturn>>
Примером типа Func<T1, T2, TReturn>
является метод типа
TResult MyFunction(T1 input1, T2 input2)
Если вы пытаетесь заменить переключатель, то словарь может быть более полезным, чем List
var methods = new Dictionary<string, Action>()
{
{"method1", () => method1() },
{"method2", () => method2() }
};
methods["method2"]();
Я рассматриваю это и переключаю инструкции на запах кода, и они часто могут быть заменены полиморфизмом.
Возможно, вы хотите попробовать это, если вы не хотите использовать списки
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
}