Как будут интерпретироваться параметры объекта [], если они передаются в другую процедуру с параметрами объекта []? - PullRequest
1 голос
/ 27 октября 2010

Если у нас есть две процедуры:

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

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

Как вторая процедура будет интерпретировать items от первой? Как отдельные объекты или как один объект, то есть object[]?

Ответы [ 4 ]

5 голосов
/ 27 октября 2010

object[] items будет интерпретироваться как один object[] параметр.

3 голосов
/ 27 октября 2010

Этот вызов:

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 голосов
/ 27 октября 2010

Ключевое слово params - это всего лишь синтаксический сахар.

Вызов MyFirstParamsFunction (1, 2, 3) аналогичен MyFirstParamsFunction (new object [] {1, 2, 3}).Компилятор вводит код для создания массива за вашей спиной.

2 голосов
/ 27 октября 2010

Если вы проверите его сами, вы заметите, что он рассматривается как один объект.

Таким образом, в MySecondParamsFunction параметр items будет иметь длину 3 в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...