ellz, если вы по каждой такой проблеме будете строчить вопросы на тостер - сотрете клаиватуру. https://docs.microsoft.com/en-us/dotnet/api/system...
почитайте что принимает в качестве второго аргумента substring. И посчитайте с какого по какой символ должна быть подстрока при i==1
ellz, Еще раз - у вас нет такого количества символов в mainText.text.
Поставьте брейкпоинт и посмотрите от какого текста вы пытаетесь взять подстроку, и с какого символа.
p4p, вы можете использовать for и для листа. А вот приведенный вами код ужасен. Потому что содержит два цикла - FirstOrDefault внутри - цекл - да еще и какое то копирование.
Чем вас foreach не устроил - вы так и не ответили.