如果将object [] params传递给另一个带有object [] params的过程,它将如何被解释?

时间:2010-10-27 13:11:07

标签: c# parameters

如果我们有两个程序:

public void MyFirstParamsFunction(params object[] items)
{
    //do something
    MySecondParamsFunction(items, "test string", 31415)
}

public void MySecondParamsFunction(params object[] items)
{
    //do something
}

第二个程序如何从第一个解释items?作为唯一对象,或作为一个对象,即object[]

4 个答案:

答案 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})相同。编译器会注入代码来创建背后的数组。