Исключение при использовании индекса String.Format (с нуля) должно быть больше или равно нулю и меньше размера списка аргументов.

у меня есть массив

ArrayList array = new ArrayList();
array.Add("a");
array.Add("b");
array.Add("c");

и у меня есть строковая переменная refFormat, которая имеет формат, как показано ниже.

string refFormat = "{2} {0}";

Я пытаюсь получить строку значений из массива в этом формате. Ниже то, что я написал.

string newStr = String.Format(refFormat,array.ToArray());

Я получаю следующее исключение, когда пытаюсь это сделать.

Индекс (отсчитываемый от нуля) должен быть больше или равен нулю и меньше размера списка аргументов.

Я знаю, что этот вопрос звучит повторяющимся, но я сомневаюсь, как выбрать значения из массива, индексы которого указаны в формате 2 и 0. Пожалуйста помоги..

Редактировать: Привет, извините за неправильный вопрос. Я использую arraylist вместо массива строк, я пытаюсь сделать то же самое. Я все еще получаю исключение, несмотря на то, что преобразовал его в массив с помощью ToArray(). Где я ошибаюсь? А также я не могу использовать List вместо arraylist здесь, так как массив содержит данные другого типа. Пожалуйста, помогите мне..


person Akshatha    schedule 31.12.2014    source источник
comment
Вы уверены, что получаете это исключение в строке string newStr = String.Format(refFormat,array);? Это не должно вызывать никаких исключений на основе вашего кода, а newStr будет c a.   -  person Soner Gönül    schedule 31.12.2014
comment
Я только что попытался воспроизвести эту ошибку, но мой код сработал. Я использовал точно такой же код из вашего вопроса, я не внес никаких изменений.   -  person Jason Evans    schedule 31.12.2014
comment
Для справки: у string есть следующий доступный метод public static string Format(string format, params object[] args). Таким образом, вопрос заключается в использовании допустимого метода, т.е. передачи массива в качестве второго параметра.   -  person Jason Evans    schedule 31.12.2014
comment
Хорошо, этот код работает нормально: dotnetfiddle.net/sQUxiu   -  person Andrei    schedule 31.12.2014
comment
Я хочу, чтобы это были c и a. Вот где это терпит неудачу.   -  person Akshatha    schedule 31.12.2014
comment
@Andrei Не знал о dotNetFiddle. Похоже, отличный ресурс.   -  person Jason Evans    schedule 31.12.2014
comment
На самом деле я использовал ArrayList вместо string[]. Может ли это быть причиной того, почему он терпит неудачу?   -  person Akshatha    schedule 31.12.2014
comment
@AkshathaPatil, конечно, причина в этом. ArrayList попадает в другую перегрузку, формат (строка, объект), я полагаю. Это также причина, по которой всем рекомендуется указывать фактический код в вопросе.   -  person Andrei    schedule 31.12.2014
comment
Зачем использовать ArrayList? Если вы настаиваете, вы можете скопировать ArrayList в новый массив с методом экземпляра .ToArray().   -  person Jeppe Stig Nielsen    schedule 31.12.2014
comment
Это работает отлично. Возможно, вы удалите элемент из ArrayList перед использованием String.Format()... поэтому я предлагаю проверить размер (например, if(array.Count >= 3){...}) перед использованием String.Format().   -  person Jaider    schedule 24.08.2015


Ответы (2)


Для справки, вот мой рабочий код:

string[] array = new string[] { "a", "b", "c", "d" };

string refFormat = "{2} {0}";

string newStr = String.Format(refFormat, array);

Console.WriteLine(newStr);

Я не столкнулся с ошибкой при запуске вышеуказанного кода.

person Jason Evans    schedule 31.12.2014

Вы неправильно указываете параметры, их нужно проиндексировать как {0} {1} и т. д.

String.Format(refFormat,array[2],array[0]);
person Tushar    schedule 31.12.2014
comment
Оба являются допустимыми способами сделать то, что просил ОП. - person Mark Avenius; 31.12.2014