Матричные методы Мне было интересно, можно ли создать массив или список < > , содержащий методы. Я не хочу использовать переключатель или множество операторов 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 }
Ответ 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 }