Why does .NET add an additional slash to the already existent slashes in a path?

13,414

Solution 1

.Net is not adding anything to your string here. What your seeing is an effect of how the debugger chooses to display strings. C# strings can be represented in 2 forms

  • Verbatim Strings: Prefixed with an @ sign and removes the need o escape \\ characters
  • Normal Strings: Standard C style strings where \\ characters need to escape themselves

The debugger will display a string literal as a normal string vs. a verbatim string. It's just an issue of display though, it doesn't affect it's underlying value.

Solution 2

The \\ is used because the \ is an escape character and is need to represent the a single \.

So it is saying treat the first \ as an escape character and then the second \ is taken as the actual value. If not the next character after the first \ would be parsed as an escaped character.

Here is a list of available escape characters:

\' - single quote, needed for character literals
\" - double quote, needed for string literals
\\ - backslash
\0 – Null 
\a - Alert 
\b - Backspace 
\f - Form feed 
\n - New line 
\r - Carriage return 
\t - Horizontal tab 
\v - Vertical quote 
\u - Unicode escape sequence for character 
\U - Unicode escape sequence for surrogate pairs. 
\x - Unicode escape sequence similar to "\u" except with variable length.

EDIT: To answer your question regarding Split, it should be no issue. Use Split as you would normally. The \\ will be treated as only the one character of \.

Solution 3

Debugger visualizers display strings in the form in which they would appear in C# code. Since \ is used to escape characters in non-verbatum C# strings, \\ is the correct escaped form.

Share:
13,414

Related videos on Youtube

GurdeepS
Author by

GurdeepS

Updated on October 21, 2020

Comments

  • GurdeepS
    GurdeepS over 3 years

    I've noticed that C# adds additional slashes (\) to paths. Consider the path C:\Test. When I inspect the string with this path in the text visualiser, the actual string is C:\\Test.

    Why is this? It confuses me, as sometimes I may want to split the path up (using string.Split()), but have to wonder which string to use (one or two slashes).

    • user1703401
      user1703401 about 13 years
      Jeffrey got it right. Use the Text Visualizer in the debugger window. Looks like a spyglass icon. Click it.
  • stefan
    stefan about 13 years
    while this is the case I don't think thats why the debugger shows it like it does, it simply needs a way to be able to show control characters (just as c# needs a way to interpretate them)
  • Jeffrey L Whitledge
    Jeffrey L Whitledge about 13 years
    @stefan - Yeah, I can't speculate about why the tools developers do any of the things they do.
  • MusiGenesis
    MusiGenesis about 13 years
    @stefan: I think that's what Jeffrey is saying - the visualizer shows strings as they would be in code, and they include the control characters in code.
  • stefan
    stefan about 13 years
    that is correct. Also have in mind it couldve been shown as a @-string instead. Iam considering shifting my +1 to -1 ;-)

Related