С#: преобразовать массив для использования в параметрах с дополнительными параметрами - программирование
Подтвердить что ты не робот

С#: преобразовать массив для использования в параметрах с дополнительными параметрами

У меня есть метод, который принимает параметры. Внутри метода к выходу должна быть добавлена ​​другая переменная:

private void ParamsTest(params object[] objs)
{
  var foo = "hello";
  // Invalid: Interpretes objs as single array parameter:
  Console.WriteLine("{0}, {1}, {2}", foo, objs);
}

Когда я звоню

ParamsTest("Hi", "Ho");

Я хотел бы видеть результат.

hello Hi Ho

Что мне нужно сделать?

Я могу скопировать foo и objs в новый массив и передать этот массив в WriteLine, но есть ли более элегантный способ заставить objs снова вести себя как params? Вид objs.ToParams()?

4b9b3361

Ответ 1

Если ваша проблема заключается только в добавлении другого элемента в ваш массив, вы можете использовать List

List<object> list = new List<object> { "hello" };
list.AddRange(objs);
Console.WriteLine("{0}, {1}, {2}, ...", list.ToArray());

params не является типом данных. Тип данных параметров по-прежнему остается простым массивом.

Ответ 2

Я хотел бы использовать string.Join для форматирования:

Console.WriteLine("{0}, {1}", foo, string.Join(", ", objs));

Ответ 3

Вы можете использовать цикл foreach, подобный этому

string objsString = string.Empty;
foreach (var ob in objs)
    objsString += ", " + ob.ToString();
Console.WriteLine("{0}{1}", foo, objsString);

Или есть еще лучший способ:

string paramsString = string.Join(", ", objs);
Console.WriteLine("{0}, {1}", foo, paramsString );

Ответ 4

Прокрутите массив params

var foo = "hello";
Console.Write(foo);
objs.ForEach(obj => Console.Write(", {0}", obj.ToString()));
Console.WriteLine();

Или используйте String.Join(), чтобы создать строковое представление массива.

var foo = "hello";
string output = String.Join(", ", objs);
Console.WriteLine("{0}, {1}", foo, output);