我有一种情况,我有一个可调用的“动态”类型的对象。我正在尝试实现一个函数,该函数将在运行时使用一组参数动态调用对象。如果我在编译时知道参数的数量,就很容易调用它:
Object StaticInvoke(dynamic func, Object[] args) {
// arguments are explicitly unwrapped and bound to the invokation
// requiring that we know the number at compile time
return func(args[0], args[1], ...);
}
但是,这并不能实现我想要的,因为 args 数组可能是可变长度的。我想不出一种方法来支持任意数量的参数。我想出的最接近的是:
static Object Invoke(dynamic func, Object[] args)
{
// not sure what to put here
switch(args.Length)
{
case 0:
return func();
case 1:
return func(args[0]);
case 2:
return func(args[0], args[1]);
...
default:
throw new NotSupportedException();
}
}
这将限制我可能通过的参数数量。我想我可以忍受这个限制,但感觉我正在尝试做的事情应该是可能的。
我基本上是在尝试在 C# 中实现 javascript“应用”函数。有没有更简单的方法来完成我想要做的事情?我觉得我错过了一些明显的东西。