C# 将变量参数传递给委托

C# 将变量参数传递给委托,c#,.net,c#-4.0,dynamic,delegates,C#,.net,C# 4.0,Dynamic,Delegates,我有以下代表: public delegate object DynamicFunction(dynamic target, params object[] args); 但是,当我尝试创建它时: DynamicFunction func = new DynamicFunction((t) => { //Handle t }); 编译器抛出一个错误,表示委托不接受1个参数,即使我将最后一个参数指定为params object[]类型 如果我向代理传递了一个额外的参数,它就可以

我有以下代表:

public delegate object DynamicFunction(dynamic target, params object[] args);
但是,当我尝试创建它时:

DynamicFunction func = new DynamicFunction((t) => {
     //Handle t
});
编译器抛出一个错误,表示委托不接受1个参数,即使我将最后一个参数指定为
params object[]
类型

如果我向代理传递了一个额外的参数,它就可以工作了。 例如:

DynamicFunction func = new DynamicFunction((t,a) => {
     //Handle t
});
但是,我不想指定那个额外的参数,因为我故意希望这些参数是可选的


这里发生了什么?

调用委托时,调用方可以提供1…n个参数。您现在所做的不是调用委托,而是为该类型的委托分配一个兼容的方法。执行此操作时,您需要恰好提供两个参数(适当的类型),因为委托的定义声明它必须接受这两个参数。

params
意味着,当您调用函数转换传递给数组的任何参数时,编译器将做一件明智的事情

这并不意味着函数本身有1个或2个参数,也不意味着函数有2个版本
f(动态目标)
f(动态目标,参数对象[]参数)

请注意,您仍然希望能够拨打电话

func (1);
func(1, optional1, optional2);
因此,您的代理需要同时处理这两个问题