如果我们有两个程序:
public void MyFirstParamsFunction(params object[] items)
{
//do something
MySecondParamsFunction(items, "test string", 31415)
}
public void MySecondParamsFunction(params object[] items)
{
//do something
}
第二个程序如何从第一个解释items
?作为唯一对象,或作为一个对象,即object[]
?
答案 0 :(得分:5)
object[] items
将被解释为一个object[]
参数。
答案 1 :(得分:3)
这个电话:
MySecondParamsFunction(items, "test string", 31415);
将扩展到这个:
MySecondParamsFunction(new object[] { items, "test string", 31415 });
因此,您的params
数组中有3个项目可供呼叫使用。您的原始items
数组将被塞入新数组中的第一项。
如果你想在第二种方法中使用一个展平的参数列表,你可以使用以下内容将新项目附加到旧数组:
MySecondParamsFunction(
items.Concat(new object[] { "test string", 31415 }).ToArray());
或者使用更好的扩展方法:
MySecondParamsFunction(items.Append("test string", 31415));
// ...
public static class ArrayExtensions {
public static T[] Append<T>(this T[] self, params T[] items) {
return self.Concat(items).ToArray();
}
}
答案 2 :(得分:2)
如果您自己检查一下,您会注意到它被视为单个物体。
因此,MySecondParamsFunction
items
参数在这种情况下的长度为3。
答案 3 :(得分:2)
params关键字只是一些语法糖。
调用MyFirstParamsFunction(1,2,3)与MyFirstParamsFunction(new object [] {1,2,3})相同。编译器会注入代码来创建背后的数组。