По сути, приведенный ниже код должен отображать следующее. «Эта текстовая переменная1, затем эта текстовая переменная2, а затем этот текст»
textBox1.Text = string.Format("This text {0} then this text {1} followed by this text", variable1, variable2);
Вместо этого отображается следующее: «Эта текстовая переменная1, переменная2, затем этот текст, за которым следует этот текст»
Размещенный вами код вряд ли даст указанный вами результат (если только variable1 не является строкой "variable1 variable2" и variable2 не является пустой строкой). Пожалуйста, опубликуйте минимально воспроизводимый пример.





Я не понимаю, как можно втиснуть две переменные в один заполнитель. Должно быть, происходит что-то еще.
Содержит ли variable1 весь текст, который должен был быть разделен между variable1 и variable2?
Интерполяция строк может упростить задачу, и вы не сможете перепутать индексы:
textBox1.Text = $"This text {variable1} then this text {variable2} followed by this text";
Вы бы использовали String.Format только в том случае, если формат был указан как переменная. Если он предоставляется как строковый литерал, используйте строковую интерполяцию.
По глупости я случайно поместил всю информацию в переменную 1. Обе переменные представляют собой два разных списка, объединенных вместе, но я случайно поместил всю информацию только в один из списков!
Интерполяция строк не решит проблему ОП, если содержимое переменных неверно, но, тем не менее, это хорошая и полезная рекомендация. +1.
Одна из причин, по которой я иногда предпочитаю String.Format интерполяции строк, заключается в том, что один или несколько параметров используются несколько раз. Это может сделать задачу более лаконичной, особенно если выражения, используемые в качестве параметров, длинные. String.Format также позволяет помещать каждый параметр в отдельную строку, что, возможно, делает код более читабельным.
Я не понимаю, как это произойдет, и, протестировав ваш код, он работает правильно. Я подозреваю, что есть какой-то другой код, который вы нам не показали.