c# - 将可变参数传递给委托(delegate)

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

我有以下委托(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/

相关文章:

c# - 如何将 byte[] 转换为 varchar?

c# - 具有可能的空对象的 Id 的 GroupBy

c# - 如何修复小数分隔符有问题的应用程序

c# - 与 PostgreSQL 连接的良好技术

.net - ASP.Net MVC 3 EF "Introducing FOREIGN KEY constraint on table may cause cycles or multiple cascade paths"

c# - 在 ASP.NET 中向用户显示预期的错误

c# - 连接数据库 C#

.net - 如何在 .net 命名空间中共享常量值?

c# - 如何查看命名空间是从哪个 dll 导入的?

c# - 反射(reflection)动态类型以判断它是否是动态类型,首先