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

+0

У вас также есть возможность делать 'builder.Append (String.Join (", ", values));'. – Enigmativity

ответ

2

Перегрузка AppendFormat, что вы используете (или, что компилятор решил использовать) имеет следующую подпись:

public StringBuilder AppendFormat(string format, object arg0) 

Он ожидает один аргумент и, следовательно, format, который содержит два аргумента ("{0}, {1}") является недействительным.

Ваше намерение состоит в том, чтобы передать массив как несколько аргументов, перегрузки, что вам нужно использовать следующий:

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

Обратите внимание, что второй аргумент является object[], не int[]. Для того, чтобы ваш код использовать эту перегрузку, необходимо преобразовать int массив в object массив так:

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

Вы должны перебрать список, используя foreach

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

См Working Fiddle.

В вашем случае, вы использовали:

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

, как вы передаете 2 аргумента {0}, {1} что является недопустимым для одного значения values в качестве результата.

1

Вам необходимо пройти в объект массива вместо Int массива. В противном случае он считает, что объект массива является параметром для arg0.

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