C#:将数组转换为在带有附加参数的参数中使用

时间:2012-11-07 10:50:57

标签: c# arrays params

我有一个采用参数的方法。在方法内部,另一个变量应添加到输出中:

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

我需要做什么?

我可以将fooobjs复制到一个新数组中并将该数组传递给WriteLine,但是有一种更优雅的方法可以强制objs再次表现为params ?有点objs.ToParams()

4 个答案:

答案 0 :(得分:10)

如果您的问题只是向阵列中添加另一个元素,则可以使用List

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

params不是数据类型。参数数据类型仍然是普通数组。

答案 1 :(得分:6)

我会使用string.Join进行格式化:

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

答案 2 :(得分:1)

您可以像这样使用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 );

答案 3 :(得分:0)

循环遍历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);