包含方法的数组

本文关键字:数组 方法 包含 | 更新日期: 2023-09-27 18:11:02

我想知道您是否可以创建包含方法的数组或列表<>。我不想使用一个开关或大量的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>的实例是像

这样的方法
TReturn MyFunction(T1 input1, T2 input2)

查看MSDN

如果你想替换一个开关,那么字典可能比列表更有用

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

我认为这和switch语句是一种代码气味,它们通常可以用多态性代替。

如果你不想使用列表,可以试试这个

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
}

object[] arproc = new object[2];

arrProc[0] = (string)Fx1();

arrProc[1] = (string)Fx2();