为什么.NET将额外的斜杠添加到path中已有的斜线?
我注意到C#为path添加了额外的斜线( \
)。 考虑pathC:\Test
。 当我在文本可视化器中用这个path检查string时,实际的string是C:\\Test
。
为什么是这样? 它使我困惑,因为有时我可能想要分割path(使用string.Split()
),但不得不知道要使用哪个string(一个或两个斜杠)。
.net在这里没有添加任何东西到你的string。 你看到的是debugging器如何select显示string的效果。 C#string可以用两种forms表示
- 逐字string:以
@
符号为前缀,不需要转义\\
字符 - 普通string:标准C风格的string,其中
\\
字符需要自己逃脱
debugging器将显示一个string文字作为一个普通的string与逐字string。 这只是一个显示问题,它并不影响它的潜在价值。
使用\\
是因为\
是一个转义字符,需要表示一个\
。
所以说把第一个\
作为一个转义字符,然后把其中的第二个\
作为实际的价值。 如果不是第一个\
之后的下一个字符将被parsing为转义字符。
这是一个可用的转义字符列表:
\' - 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.
编辑:要回答你关于Split
的问题,它应该是没有问题的。 正常情况下使用Split
。 \\
将被视为只有\
的一个字符。
debugging器可视化器以C#代码显示的forms显示string。 由于\
用于转义非verbatum C#string中的字符,所以\\
是正确的转义forms。
好的,所以上面的答案是不完全正确的。 正因为如此,我正在为下一个阅读这篇文章的人添加我的发现。
如果从外部源读取所述string,则不能使用上表中的任何字符来分割string。
即
string[] splitStrings = File.ReadAllText([path]).Split((char)7);
不会被这些字符分割。 但是内部创build的string正常工作
即
string[] splitStrings = "hello\agoodbye".Split((char)7);
这可能不适用于从文件中读取文本的其他方法。 我不确定,因为我没有用其他方法testing。 考虑到这一点,最好不要使用这些字符来分隔string!