为什么.NET会为路径中现有的斜杠添加额外的斜杠?

时间:2011-03-28 22:47:25

标签: c# visual-studio debugging

我注意到C#为路径添加了额外的斜杠(\)。考虑路径C:\Test。当我在文本可视化器中使用此路径检查字符串时,实际字符串为C:\\Test

这是为什么?它让我感到困惑,因为有时我可能想要将路径分开(使用string.Split()),但不得不想知道使用哪个字符串(一个或两个斜杠)。

4 个答案:

答案 0 :(得分:16)

使用\\是因为\是转义字符,需要代表单个\

所以它说将第一个\视为转义字符,然后将第二个\视为实际值。如果不是,则第一个\之后的下一个字符将被解析为转义字符。

以下是可用转义字符列表:

\' - 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\\将仅被视为\的一个字符。

答案 1 :(得分:10)

.Net不会在此处向您的字符串添加任何内容。你看到的是调试器如何选择显示字符串的效果。 C#字符串可以用2种形式表示

  • 逐字字符串:以@符号为前缀,无需转义\\个字符
  • 普通字符串:标准C样式字符串,其中\\字符需要自行转义

调试器将字符串文字显示为普通字符串与逐字字符串。这只是一个显示问题,它不会影响它的潜在价值。

答案 2 :(得分:6)

调试器可视化器以C#代码中出现的形式显示字符串。由于\用于转义非verbatum C#字符串中的字符,因此\\是正确的转义表单。

答案 3 :(得分:0)

好的,所以上面的答案并不完全正确。因此,我正在为读这篇文章的下一个人添加我的发现。

如果您正在从外部源读取所述字符串,则无法使用上表中的任何字符拆分字符串。

即,

string[] splitStrings = File.ReadAllText([path]).Split((char)7);

不会被这些字符分开。但是内部创建的字符串工作正常。

即,

string[] splitStrings = "hello\agoodbye".Split((char)7);

对于从文件中读取文本的其他方法,这可能不适用。我不确定,因为我没有用其他方法测试过。考虑到这一点,最好不要使用这些字符来分隔字符串!