【问题标题】:Passing variable arguments to a delegate将变量参数传递给委托
【发布时间】:2015-07-07 19:17:47
【问题描述】:

我有以下代表:

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

但是,我不想指定额外的参数,因为我故意希望这些参数是可选的。

这里发生了什么?

【问题讨论】:

    标签: c# .net c#-4.0 dynamic delegates


    【解决方案1】:

    params 意味着当您调用函数将您传递的任何参数转换为数组时,编译器会做一些聪明的事情。

    这并不意味着函数本身需要1或2个参数,也不意味着函数f(dynamic target)f(dynamic target, params object[] args)有2个版本。

    请注意,您仍然希望能够调用

    func (1);
    func(1, optional1, optional2);
    

    所以你的代表需要同时处理这两个问题。

    【讨论】:

      【解决方案2】:

      调用委托时,调用者可以提供 1...n 个参数。您现在所做的不是调用委托,而是将兼容的方法分配给该类型的委托。这样做时,您需要提供 正好两个 参数(适当类型的),因为这是委托的定义声明它必须接受的内容。

      【讨论】:

        猜你喜欢
        • 2012-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-03
        • 1970-01-01
        • 1970-01-01
        • 2018-05-07
        • 2021-10-23
        相关资源
        最近更新 更多