如果我有一个与委托参数模式匹配的混合类型列表,我该如何调用一个采用多个参数的委托?

How can I call a delegate that takes multiple parameters if I have a list of mixed type that matches the delegate parameter pattern?

我正在写一个简单的解释器。

对于函数调用,我有一个存储委托的哈希表,函数名称作为键。当我检索委托时,我可以检查是否输入并解析了正确的参数类型以传递给函数。

但是,这些参数在一个混合类型的列表中,并且委托参数是正常声明的。如何使用此参数列表调用任何代表? 例如

private Dictionary<string, Delegate> _functions = new Dictionary<String, Delegate>();
public string exFunc(int num, string text)
{
     return num;
}
AddToDictionary(exFunc); //this is a method that calculates the correct delegate signature for any method and adds to _functions
List<paramTypes> parameters = new List<paramTypes>() {5,"hello"};
Delegate d = _functions["exFunc"];

如果已检查委托参数签名以便参数列表具有正确的类型,是否有办法执行类似以下操作?:

var res = d(ToSingleParams(parameters));

我查看了 "params" 关键字,但它仅适用于我能分辨的单一类型的数组。

感谢您的帮助!

正在将我的评论转换为答案。您需要使用 DynamicInvoke 方法来动态调用它。它有 params object[] 参数,可用于方法参数。在您的示例中,它将是这样的:

private Dictionary<string, Delegate> _functions = new Dictionary<String, Delegate>();
public string exFunc(int num, string text)
{
     return num;
}
AddToDictionary(exFunc); //this is a method that calculates the correct delegate signature for any method and adds to _functions
List<paramTypes> parameters = new List<paramTypes>() {5,"hello"};
Delegate d = _functions["exFunc"];

d.DynamicInvoke(parameters.ToArray());

这是使用 DynamicInvoke - https://dotnetfiddle.net/n01FKB

的工作示例