我有以下委托(delegate):
public delegate object DynamicFunction(dynamic target, params object[] args);
但是,当我尝试创建它时:
DynamicFunction func = new DynamicFunction((t) => {
//Handle t
});
编译器抛出一个错误,指出委托(delegate)不接受 1 个参数,即使我将最后一个参数指定为 params object[]
类型也是如此。
如果我将 exacly one 额外参数传递给委托(delegate),它会起作用。 例如:
DynamicFunction func = new DynamicFunction((t,a) => {
//Handle t
});
但是,我不想指定额外的参数,因为我有意希望这些参数是可选的。
这里发生了什么?
最佳答案
params
意味着当您调用函数将您传递给数组的任何参数转换时,编译器会做一些聪明的事情。
不是说函数本身有1个或2个参数,也不是说有2个版本的函数f(dynamic target)
和f(dynamic target, params object [] args)
.
请注意,您仍然希望能够调用
func (1);
func(1, optional1, optional2);
因此您的委托(delegate)人需要同时处理这两个问题。
关于c# - 将可变参数传递给委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29927894/