【问题标题】:C#: Convert array to use in params with additional parametersC#:将数组转换为在带有附加参数的参数中使用
【发布时间】:2012-11-07 10:50:56
【问题描述】:

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

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 再次充当参数?有点像objs.ToParams()

【问题讨论】:

  • 不要被 Console.WriteLine 示例或格式字符串所牵制。这不是我真正的问题。真正的问题:如何让 WriteLine 看到 4(格式、foo 和 2 个数组元素)args 而不是 3(格式、foo 和数组)。

标签: c# arrays params


【解决方案1】:

如果您的问题只是在数组中添加另一个元素,您可以使用 List

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

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

【讨论】:

  • 这是我目前的解决方案。所以没有办法更优雅地做到这一点,即不分配列表和复制对象?
  • 问题是,您无法在 .NET 中调整数组的大小。所以要么使用另一种集合数据类型,要么复制值。
【解决方案2】:

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

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

【讨论】:

  • 这解决了 Console.WriteLine 示例的问题,但自然 :) WriteLine 不是我真正的问题,只是一个(太简单的?)插图。
【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      相关资源
      最近更新 更多