为什么.NET要在路径中已经存在的斜线上增加一个额外的斜线?

问题描述 投票:-1回答:1

我注意到C#在路径中添加了额外的斜线(\)到路径。考虑路径 C:\Test. 当我在文本展示台中检查带有这个路径的字符串时,实际的字符串是 C:\\Test.

为什么会这样?这让我很困惑,因为有时我可能想把路径分开(使用 string.Split()),但不知道该用哪个字符串(一个或两个斜杠)。

c# file escaping quotes
1个回答
12
投票

.Net中并没有给你的字符串添加任何东西。 你所看到的是调试器选择显示字符串的效果。 C# 字符串可以用两种形式表示

  • 逐字形字符串。前缀为 @ 符号,并消除了逃跑的需要 \\ 人物
  • 普通字符串。标准C型字符串,其中 \\ 角色需要自我解脱

调试器会将一个字符串字面值显示为一个普通的字符串与一个逐字的字符串。 不过这只是一个显示的问题,并不影响它的底层值。


17
投票

\\ 之所以使用,是因为 \ 是一个转义字符,需要表示一个单一的 \.

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

这里有一个可用的转义字符列表。

\' - 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: 为了回答你关于 Split,应该是没有问题的。 使用 Split 就像你平时一样。 的 \\ 将被视为只有一个字符的 \.


6
投票

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


0
投票

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

如果你从外部源读取一个字符串,你不能使用上面表格中的任何一个字符来分割这个字符串。

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

将不会被这些字符分割。然而内部创建的字符串可以正常工作。

也就是,

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

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

© www.soinside.com 2019 - 2024. All rights reserved.