Небезопасные манипуляции со строками по своей сути некорректны. Строки .NET не должны редактироваться, и, скорее всего, в фреймворке есть код, построенный на предположении, что строка никогда не изменится. Все, что опирается на String.GetHashCode (), сразу приходит на ум, но могут быть закулисные оптимизации или проверки работоспособности. Предположительно это что-то вроде того, что вызывает ошибку CLR.
Если после профилирования вы обнаружите, что реализация неизменяемой строки в .NET не соответствует вашим потребностям, простейшая изменяемая альтернатива, которая позволит вам изменить ее длину: List<char>
.