String. Insert(Int32, String) Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает новую строку, в которой указанная строка вставляется в указанной позиции индекса в данном экземпляре.
Параметры
Положение отсчитываемого от нуля индекса вставки.
Строка, которую требуется вставить.
Возвращаемое значение
Новая строка, эквивалентная данному экземпляру, но с тем отличием, что в положение value помещено значение startIndex .
Исключения
value имеет значение null .
startIndex имеет отрицательное значение или больше длины этого экземпляра.
Примеры
В следующем примере символ пробела вставляется в четвертую позицию символа (символ по индексу 3) строки.
Следующее консольное приложение предлагает пользователям ввести одно или несколько прилагательных, чтобы описать двух животных. Затем он вызывает Insert метод для вставки текста, введенного пользователем в строку.
Комментарии
Если startIndex значение равно длине этого экземпляра, value добавляется к концу этого экземпляра.
Этот метод не изменяет значение текущего экземпляра. Вместо этого он возвращает новую строку, в которую value вставляется текущий экземпляр.
Например, возвращаемое значение "abc".Insert(2, "XYZ") abXYZc.
Как добавить строку в массив string []? Нет функции .Add
Я бы хотел преобразовать FI.Name в строку, а затем добавьте ее в мой массив. Как я могу это сделать?
задан 17 сен ’09, 14:09
14 ответы
Вы не можете добавлять элементы в массив, так как он имеет фиксированную длину. Вы ищете List<string> , который позже можно превратить в массив, используя list.ToArray() , например
ответ дан 18 мая ’20, 07:05
+1 Я предложу ссылку на свой ответ по этому поводу. stackoverflow.com/questions/1168915/… — Сэм Харвелл
«Вы не можете добавлять элементы в массив» — на самом деле вы можете, см. Ниже. — Алекс Стрикленд
Кроме того, вы можете изменить размер массива.
Array.Resize is правильный способ изменения размера массива. Если вы добавите комментарий перед фрагментом кода, в котором говорится, что это редко лучший способ справиться с ситуациями, когда массив представляет коллекцию с изменяемым размером, у вас есть +1. 🙂 — Сэм Харвелл
Фактически, это (единственный) ответ, который точно решает вопрос OP. — диалекс
Список использования из System.Collections.Generic
Или сокращенно (с использованием инициализатора коллекции):
Если вам действительно нужен массив в конце, используйте
Возможно, вам лучше абстрагироваться от интерфейса, такого как IEnumerable, а затем просто вернуть коллекцию.
Изменить: если вы должен используйте массив, вы можете предварительно выделить его до нужного размера (т. е. количества FileInfo, которое у вас есть). Затем в цикле foreach поддерживайте счетчик для индекса массива, который необходимо обновить следующим образом.

Мой метод присоединения получает только массив string [], я не могу использовать List <>. Есть ли способ решить эту проблему с помощью массива? — Серджио Тапиа
Используйте список а затем, когда вам понадобится массив, вызовите метод ToArray — Крис Данауэй
Создан 27 июля ’17, 14:07

Если не ошибаюсь, это:
ответ дан 02 авг.
Вот как я добавляю к строке, когда это необходимо:
ответ дан 20 авг.
Почему бы вам не использовать цикл for вместо использования foreach. В этом сценарии вы не можете получить индекс текущей итерации цикла foreach.
Имя файла можно добавить к строке [] таким образом,

Единственная проблема: вы ДОЛЖНЫ знать свою длину listaDeArchivos является. Если вы этого не сделаете (то есть, если это может когда-либо измениться, и было бы сложно провести подсчет заранее, потому что ваши объекты являются вложенными моделями или полями модели, которые могут / не могут быть заполнены, например), и вы просто хотите сделать string[] Coleccion; затем назначьте это как int idx = 0; Coleccion[idx] = fileName; idx++; , он скажет вам Use of unassigned local variable ‘Coleccion’ . Просто к вашему сведению для тех, кто хочет адаптировать это, чтобы сделать его более динамичным, это ловушка. — vapcguy
Си-строки (массивы символов)

В прошлом уроке мы разобрали динамические String-строки, а сейчас настало время “простых” статических строк – такая строка представляет собой массив символов типа char (char array) и для неё работает такой же синтаксис, как и для остальных массивов (урок про массивы). Конец строки определяется нулевым символом \0 (или целым число 0 ), за это такой тип строк называют null-terminated string, также это стандартные строки языка Си и поэтому они называются cstring. Ноль на конце позволяет определять конец строки и её длину.
Си-строки
Основное отличие таких строк от String-строк: это обычный массив, размер которого известен заранее и не меняется в процессе работы. Можно объявить как массив и посимвольно задать текст:
Такой вариант записи максимально неудобный, поэтому строки в C/C++ можно задавать просто текстом в двойных кавычках (компилятор сам посчитает размер массива):
Любой написанный в двойных кавычках текст:
- Воспринимается компилятором как массив символов, а точнее – указателем на первый символ.
- Имеет тип const char* .
- Хранится в оперативной памяти микроконтроллера.
- Компилятор автоматически добавляет в конец строки нулевой символ ‘\0’ .
Полученный выше массив содержит 6 символов: 5 на слово hello и 1 на завершающий символ.
Си-строки можно складывать следующим образом:
И даже переносить сложение:
Сложение происходит на этапе компиляции, то есть в машинном коде это будет одна большая строка.
У нас есть доступ к символам строки, как к элементам массива:
В отличие от String-строк, Си-строки:
Для этого существуют специальные функции, о которых мы поговорим ниже.
Длина Си-строки
Для определения длины текста можно использовать оператор strlen() , который возвращает количество символов в строке. Сравним его работу с оператором sizeof() :
Здесь оператор sizeof() вернул количество байт, занимаемое массивом. Массив я специально объявил с размером бОльшим, чем содержащийся в нём текст. А вот оператор strlen() посчитал и вернул количество символов, которые идут с начала массива и до нулевого символа в конце текста без его учёта. А вот такой будет результат при инициализации без указания размера массива:
Массив строк
Можно создать один массив с несколькими строками и обращаться к ним по индексу, фактически это будет двухмерный массив. Выглядит следующим образом:
Таким образом удобно паковать строки для создания текстовых меню и прочего. Единственный большой минус – весь этот текст висит в оперативной памяти мёртвым грузом. Можно сохранить его во Flash – программной памяти (PROGMEM), об этом читайте в отдельном уроке.
F() macro
Есть готовый инструмент, позволяющий очень просто хранить статичные текстовые данные во Flash памяти для передачи в функции, которые могут с таким текстом работать. Этот способ хорош для последующего складывания строк или вывода текста в монитор порта или на дисплей. Достаточно обернуть строку в макрос F() :
Строка “Hello, World!” будет записана во Flash память и не займёт 14 байт (13 + нулевой) в оперативной.
Инструменты для Си-строк
Есть готовые функции, позволяющие конвертировать различные типы данных в строки:
- itoa(int_data, str, base) – записывает переменную типа int int_data в строку str с базисом* base.
- ltoa (long_data, str, base) – записывает переменную типа long long_data в строку str с базисом* base.
- ultoa (unsigned_long_data, str, base) – записывает переменную типа unsigned long unsigned_long_data в строку str с базисом* base.
- dtostrf(float_data, width, dec, str) – записывает переменную типа float float_data в строку str с количеством символов width и знаков после запятой dec.
* Примечание: base – основание системы счисления, тут всё как при выводе в Serial:
- DEC – десятичная
- BIN – двоичная
- OCT – восьмеричная
- HEX – шестнадцатеричная
И наоборот, можно преобразовывать строки в численные данные, функция вернёт результат:
- atoi(str) – преобразование str в int
- atol(str) – преобразование str в long
- atof(str) – преобразование str в float
2 кБ Flash памяти!! Максимально избегайте их применения в крупном проекте. Для преобразования можно сделать свою функцию, практически готовые варианты для всех типов данных можно найти в стандартной ардуиновской Print.cpp (ссылка на файл на гитхабе Arduino).
Массивы символов не так просты, как кажутся: их возможности сильно расширяет стандартная библиотека cstring. Использование всех доступных фишек по работе с массивами символов позволяет полностью избавить свой код от тяжёлых String-строк и сделать его легче, быстрее и оптимальнее. Подробно обо всех инструментах можно почитать в официальной документации. Очень интересный пример с манипуляцией этими инструментами можно посмотреть здесь. А мы вкратце рассмотрим самые полезные.
Важный момент: библиотека работает со строками как с указателями, и многие функции возвращают как результат именно указатель. Как это понимать, если вы не читали урок про указатели и/или тема слишком сложная? Указатель – первый символ в строке, работа со строкой начнётся с него. Последним символом является нулевой символ, и для программы строка существует именно в этом диапазоне. Если какая-то функция возвращает указатель на конкретный символ в строке – по сути она возвращает часть строки, начиная с этого символа и до конца строки. Например, мы искали символ , в строке «Hello, world!» . Программа вернёт нам указатель на эту запятую, по сути это будет кусочек той же самой строки, содержащий «, world!» . Просто “начало” строки сместится.
Копирует str2 в str1, включая NULL . Так как мы передаём указатель, цель и место назначения можно “подвинуть”:
Копирует num символов из начала str2 в начало str1
Библиотека
У меня есть библиотека для работы с Си-строками: их преобразования и парсинга на блоки данных. Некоторые инструменты реализованы гораздо эффективнее, чем в стандартной строковой библиотеке. Библиотека называется GParser, документацию и примеры смотрите на GitHub.