我想知道你是否可以创建一个数组或一个List<>包含方法。我不想使用开关或许多if语句。
由于
答案 0 :(得分:14)
你去吧
List<Action> list = new List<Action>();
list.Add( () => ClassA.MethodX(paramM) );
list.Add( () => ClassB.MethodY(paramN, ...) );
foreach (Action a in list) {
a.Invoke();
}
答案 1 :(得分:7)
是的,可以有这样的数组或列表。根据输入或输出参数的数量,您可以使用类似
的内容List<Func<T1, T2, TReturn>>
Func<T1, T2, TReturn>
类型的实例是类似
TReturn MyFunction(T1 input1, T2 input2)
答案 2 :(得分:1)
如果您尝试更换开关,则Dictionary可能比List
更有用var methods = new Dictionary<string, Action>()
{
{"method1", () => method1() },
{"method2", () => method2() }
};
methods["method2"]();
我考虑到这一点并将语句切换为代码气味,它们通常可以是replaced by polymorphism。
答案 3 :(得分:1)
如果你不想使用列表
,也许你想尝试这个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
}