例如我有这样的 C# 方法:
void someMethod(String arg1, params object[] extras)
{
foreach (object extra in extras)
{
Console.WriteLine(extra);
}
}
当我这样称呼它时:
int[] vals = new int[] { 10, 25 };
someMethod("String", vals);
我得到输出:
System.Int32[]
实际上我想将 vals 变量作为多个 int 参数传递,而不是作为数组类型的单个参数传递,有什么方法可以做到吗?
没有其他办法。问题是,
extras
参数是数组类型(object []
),params
只是语法糖,这意味着你不能真正传递多个参数,只能传递一个,甚至可以是null
。
params
方法的重载指定它首先尝试直接匹配数组参数。只有这样它才会尝试通过 params
元素进行匹配。
它在这里不起作用的原因是因为
int[]
数组不是 object[]
数组,也不能将其转换为一个。
如果你声明了它就会起作用
object[] vals = new object[] { 10, 25 };
或者改变方法
void someMethod(String arg1, params int[] extras)