2010-08-23 3 views
0

StringBuilder.ToString() добавляет символы «\» в начале и конце строки.StringBuilder.ToString() добавляет символы «» в начале и конце строки

Почему это?

Перед вызовом .ToString() строка не имеет символа '\'.

+5

, пожалуйста, введите код здесь, чтобы мы могли видеть. –

+3

Опубликовать код? – Paddy

+0

-1 После 790 вопросов можно было бы подумать, что вы зададите менее элементарные вопросы или, по крайней мере, получите лучшие записи. Или даже научитесь проверять орфографию. –

ответ

18

Вы думаете о этих обратных косых черт здесь?

Example screenshot showing backslashes in the Watch window

Если да, то вы искажение выходного сигнала: обратные слеши на самом деле не в строке. Они отображаются только здесь, чтобы сделать представление действительным в соответствии с синтаксисом C#. Например, если вы должны были выводить строку, используя Console.WriteLine, она не имела бы обратной косой черты.

Справедливости ради, это is непоследовательный. Отладочный вид для StringBuilder не имеет обратных косых черт, но для строк.

+0

+1, Хороший снимок экрана –

+0

[Спасибо!] (Http://meta.stackexchange.com/questions/700/) – Timwi

+0

Это из-за цитаты, которую вы добавили. «\» Действительно не присутствует в строке te. Это просто визуализация отладчика. Нажмите на лупу, и вы увидите реальный текст в построителе строк! – Scordo

1

Какой у вас текст в StringBuilder?

Следующий код только выписывает «привет» мне

var sb = new StringBuilder(); 
sb.Append("hello"); 
var test = sb.ToString(); 
Console.WriteLine(test); 

ли я что-то отсутствует?

+0

Это не совсем ответ, поскольку вы действительно неуверенный, а также вопрос просто ошибочен в текущем состоянии. – Dykam

+0

@Dykam: Я думаю, что это полезный ответ. Он обеспечивает OP правильно работающим образцом. –

+0

@ Dykam, возможно, потому, что я не получаю тот же результат, что и человек, задающий вопрос, и он не дал мне многого, чтобы пойти дальше –

2

StringBuilder не добавляет никаких символов, кроме прилагаемых. Возможно, вы смотрите на представление Debug для строки, созданной строковым построителем, и characters which may need to be escaped перед обратным следом имеют обратную косую черту (\) для удобства копирования отладочного вывода.

Символы \ на самом деле не находятся в строковых данных, а представляют собой часть дисплея строки.

Edit: здесь есть тест, который вы можете запустить

private static void TestStringBuilder() 
{ 
    StringBuilder builder = new StringBuilder(); 
    builder.Append(@"""saoetuhasoethuasteuhasoetnuh"""); 
    foreach (char c in builder.ToString()) 
    { 
     System.Diagnostics.Debug.Assert(c != '\\', "EPIC STRINGBUILDER FAIL"); 
    } 
} 
Смежные вопросы