Blankman
Blankman

Reputation: 267320

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.

Upvotes: 0

Views: 5341

Answers (3)

Timwi
Timwi

Reputation: 66604

Are you thinking of these backslashes here?

Example screenshot showing backslashes in the Watch window

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.

Upvotes: 18

user7116
user7116

Reputation: 64148

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

Upvotes: 2

Jason Quinn
Jason Quinn

Reputation: 2573

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?

Upvotes: 1

Related Questions