我有以下代表:
public delegate object DynamicFunction(dynamic target, params object[] args);
但是,当我尝试创建它时:
DynamicFunction func = new DynamicFunction((t) => {
//Handle t
});
编译器抛出一个错误,指出委托不接受1个参数,即使我指定了最后一个参数为params object[]
类型。
如果我将 exacly one 额外参数传递给委托,则可行。 例如:
DynamicFunction func = new DynamicFunction((t,a) => {
//Handle t
});
但是,我不想指定额外的参数,因为我故意希望这些参数是可选的。
这里发生了什么?
答案 0 :(得分:2)
params
意味着当你调用函数转换你传递给数组的任何参数时,编译器会做聪明的事情。
这并不意味着函数本身需要1或2个参数,并不意味着有2个版本的函数f(dynamic target)
和f(dynamic target, params object[] args)
。
请注意,您仍然希望能够致电
func (1);
func(1, optional1, optional2);
所以你的代表需要同时处理这两个问题。
答案 1 :(得分:1)
当调用委托时,调用者可以提供1 ... n个参数。您现在正在做的事情不是调用委托,而是将兼容方法分配给该类型的委托。这样做时,您需要提供正好两个参数(相应类型),因为这是委托的定义所声明的必须接受的内容。