【发布时间】:2022-01-08 21:16:29
【问题描述】:
考虑这种方法:
public static void InvokeAsync(params object[] arguments)
{
// do something
}
现在我想用string[] 类型的单个参数调用它:
InvokeAsync(new string[] { "Test" });
不幸的是,这导致arguments 成为string[] 实例和arguments[1] == "Test"。我需要将字符串数组作为 object[] 数组的第一个元素。
我可以通过以下方式解决这个问题:
InvokeAsync(new object[] { new string[] { "Test" }});
但这有点违背params 声明的目的,而且也不好(而且不明显!)。有没有更好的办法?
【问题讨论】:
-
“现在我想用一个字符串[]类型的参数来调用它”。那么你为什么首先使用
params声明呢? -
是否有特殊原因需要将其声明为采用
object[]而不是特定类型的数组或使类通用? -
@Powerlord 实际方法来自一个通过反射执行泛型调用的类。
-
@ShawnOrr 这就是问题所在。对于其他实际参数类型,一切都按预期工作。
标签: c# parameter-passing variadic-functions