简体   繁体   中英

StringBuilder.ToString() is adding '\' characters in the beginning and ending of the string

StringBuilder.ToString() is adding '\\' characters in the beginning and ending of the string.

Why is this?

Before calling .ToString() the string doesn't have the '\\' character.

Are you thinking of these backslashes here?

屏幕截图示例在“监视”窗口中显示反斜杠

If so, you are misreading the output: The backslashes are not actually in the string. They are only displayed here to make the representation valid according to C# syntax. If you were to output the string using Console.WriteLine , for example, it would not have backslashes.

To be fair, it is inconsistent. The debug view for the StringBuilder doesn't have the backslashes, but the one for strings does.

StringBuilder does not add any characters besides those you have appended. Perhaps you are looking at the Debug View of a string created by string builder and characters which may need to be escaped have the backslash ( \\ ) in front of them for convenience of copying the debug output.

The \\ characters are not actually in the string data itself, but rather part of the display of the string.

Edit: here is a test you can run

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");
    }
}

What text do you have in the StringBuilder?

The following code just writes out "hello" for me

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

Am I missing something?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM