Man*_*kar 2 c# indexing collections delegates
有一组方法,如:
Foo(int, float, params objects[])
Goo(int, params objects[])
Too()
Run Code Online (Sandbox Code Playgroud)
每个参数都采用不同数量的&参数类型(返回值也是如此).
我从数据库中读取一个整数(索引).整数对应于上述方法之一(对于Foo为1,对于Goo为2,对于Too为3).
如何在集合中存储上述方法(作为委托),以便通过使用从db读取的整数作为索引索引到集合中来调用适当的方法.
您可以使用Delegate[]- 当您读取整数时,您需要将相关的数组值转换为a Action<int, float, object[]>,a Action<int, object[]>或Action之前调用它.
将方法存储在DelegateList或Array中并用于DynamicInvoke调用它们 - 请注意,您需要传递正确的数字(和类型)变量.
var delegates = new List<Delegate>();
delegates.Add((Action<int, float, object[]>)Foo);
//...
delegates[0].DynamicInvoke(new[] {0, 1.2, new object()});
Run Code Online (Sandbox Code Playgroud)
当您想要将默认值(读取:零/空)传递给方法时,此解决方案最适合 - 然后您可以使用反射来创建默认值.
另一个有用的情况是,如果要调用特定的方法签名(即接收单个int的方法),那么您可以转到所需的索引并检查(使用反射)是否可以使用该参数调用委托.
否则,您需要了解所调用的方法,因为每种方法都有不同的参数类型和编号.