2016-08-23 4 views
0

私は私がなぜのStringBuilder AppendFormat IEnumarble

int[] values = new int[] {1,2}; 
StringBuilder builder = new StringBuilder(); 
builder.AppendFormat("{0}, {1}", values); 

私はIntelliSenseのエラー

なしフォーマット文字列内の既存の引数

を参照して、文字列ビルダとオブジェクトのリストを持っていますこのエラーが表示され、どうすればよいですか リストのパラメータをAppendFormatの内部で使用します

あなたは foreach

int[] values = new int[] {1,2}; 
StringBuilder builder = new StringBuilder(); 
foreach (int val in values) 
{ 
    builder.AppendFormat("{0}\n", val);   
} 
Console.WriteLine(builder); 

を使用してリストをループする必要がある0

+0

また、 'builder.Append(String.Join("、 "、values));'を実行するオプションがあります。 – Enigmativity

答えて

2

現在使用しているAppendFormatの過負荷(またはコンパイラが使用することを決めた)次のシグネチャがあります。

public StringBuilder AppendFormat(string format, object arg0) 

それ故、単一の引数と二つの引数が含まれているformatを期待しているが("{0}, {1}" ) 無効です。 2番目の引数はobject[]、ないint[]であること

public StringBuilder AppendFormat(string format, params object[] args) 

注:

あなたの意図が複数の引数として配列を渡すことで、あなたが使用する必要が過負荷は次のとおりです。このオーバーロードあなたのコードを使用するには、あなたがこのようなobject配列にint配列を変換する必要があります。

builder.AppendFormat("{0}, {1}", values.Cast<object>().ToArray()); 
0

Working Fiddleを参照してください。あなたのケースでは

は、使用:

builder.AppendFormat("{0}, {1}", values); 

を使用すると、結果としてvaluesの単一の値では無効である2つの引数を{0}, {1}渡しているよう。

1

あなたは代わりにint配列のオブジェクト配列で渡す必要があります。それ以外の場合は、配列オブジェクトがarg0のパラメータとみなされます。

object[] values = new object[] { 1, 2 }; 
StringBuilder builder = new StringBuilder(); 
builder.AppendFormat("{0}, {1}", values);