14

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種類はobjs.ToParams()

4

4 に答える 4

10

問題が配列に別の要素を追加することだけである場合は、リストを使用できます

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

paramsデータ型ではありません。パラメータのデータ型は、まだ単純な配列です。

于 2012-11-07T10:56:08.117 に答える
6

私はstring.Joinフォーマットを行うために使用します:

Console.WriteLine("{0}, {1}", foo, string.Join(", ", objs));
于 2012-11-07T10:59:04.660 に答える
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 );
于 2012-11-07T10:54:53.040 に答える
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);
于 2012-11-07T10:55:41.553 に答える