为什么.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!