Матричные методы

Мне было интересно, можно ли создать массив или список < > , содержащий методы. Я не хочу использовать переключатель или множество операторов if.

Спасибо

Ответ 1

Там вы идете

List<Action> list = new List<Action>();
list.Add( () => ClassA.MethodX(paramM) );
list.Add( () => ClassB.MethodY(paramN, ...) );

foreach (Action a in list) {
    a.Invoke();
}

Ответ 2

Да, возможно иметь такой массив или список. В зависимости от количества входных или выходных параметров вы должны использовать что-то вроде

List<Func<T1, T2, TReturn>>

Примером типа Func<T1, T2, TReturn> является метод типа

TResult MyFunction(T1 input1, T2 input2)

Взгляните на MSDN.

Ответ 3

Если вы пытаетесь заменить переключатель, то словарь может быть более полезным, чем List

var methods = new Dictionary<string, Action>()
              {
                  {"method1", () => method1() },
                  {"method2", () => method2() }
              };

methods["method2"]();

Я рассматриваю это и переключаю инструкции на запах кода, и они часто могут быть заменены полиморфизмом.

Ответ 4

Возможно, вы хотите попробовать это, если вы не хотите использовать списки

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
}