С#: преобразовать массив для использования в параметрах с дополнительными параметрами
У меня есть метод, который принимает параметры. Внутри метода к выходу должна быть добавлена другая переменная:
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()
?
Ответы
Ответ 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);