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

时间:2015-01-18 21:30:11

标签: c# .net delegates interpreter

我正在写一个简单的翻译。

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

但是,这些参数位于混合类型列表中,并且委托参数是正常声明的。如何使用此参数列表调用任何代理? e.g。

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));

我调查了&#34; params&#34;关键字,但它只适用于我能说的单一类型的数组。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

将我的评论转换为答案。您需要使用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

的工作示例