2015-10-18 2 views
0

Действительно ???C# Класс строки: нет способа нажатия символа в конец строки?

Я искал через https://msdn.microsoft.com/en-us/library/system.string(v=vs.110).aspx и не вижу никакого метода, который может непосредственно нажимать символ на конец строки. Лучшее, что я могу понять это

mystr.Insert(mystr.Length, newchar.ToString()); 

который кажется innefficient из-за накладных расходов, участвующих в преобразовании символа в строку и выполняет конкатенацию. Мой конкретный пример использования выглядит так:

while (eqtn[curidx] >= '0' && eqtn[curidx] <= '9') istr.Insert(istr.Length, eqtn[curidx++].ToString()); 

только потому, что я не могу придумать, как лучше это сделать. Есть ли способ лучше?

+2

Строки неизменяемы. Каждый раз, когда вы манипулируете строкой, пытающейся ее изменить, вы создаете новую строку. – Steve

+2

Используйте 'StringBuilder' – JonE

ответ

5

Строки в .NET неизменяемы, поэтому ваш код ничего не делает. Каждый метод на String создает новый экземпляр, он не изменяет существующую строку.

String класса переопределяет + оператор, чтобы создать новую строку с символом, приложенным к концу:

istr = istr + eqtn[curidx++]; 

Если вы делаете много таких операций будет более эффективно использовать StringBuilder. Это в основном изменчивый String.

Вы можете использовать метод Append, чтобы добавить символ в конец. Когда вы будете готовы, вызовите ToString, чтобы получить построенную строку.

2

Да, это абсолютно верно: вы не можете нажимать символ на конец string, потому что строки C# неизменяемые. Когда у вас есть объект, вы застряли с его значением, пока не создадите новый объект string.

С другой стороны, создавая новую строку с дополнительным символом в конце очень прост: использовать + перегрузки оператор, который выполняет конкатенацию:

string s = "abc"; 
s += '9'; // s becomes "abc9" 

Обратите внимание, что это решение не так хорошо используйте в цикле, потому что если ваш цикл работает N раз, вы создаете N отбрасываемых объектов в процессе. Лучшим решением является использование StringBuilder, в котором содержится строка mutable на C#. StringBuilder класс имеет удобный метод Append, который толкает символы в конец StringBuilder. Как только вы закончите строить строку, вызовите ToString, чтобы собрать результат в качестве неизменяемого объекта string.

Смежные вопросы