C# 为什么.NET在路径中已经存在的斜杠上再添加一个斜杠?
我注意到C在路径中添加了额外的斜杠(C# 为什么.NET在路径中已经存在的斜杠上再添加一个斜杠?,c#,visual-studio,debugging,C#,Visual Studio,Debugging,我注意到C在路径中添加了额外的斜杠(\)。考虑路径 C:\测试< /代码>。在文本可视化器中使用此路径检查字符串时,实际字符串为C:\\Test 为什么会这样?这让我很困惑,因为有时我可能想拆分路径(使用string.split()),但不得不想知道使用哪个字符串(一个或两个斜杠)。之所以使用\\,是因为\是一个转义字符,需要表示单个\的路径 也就是说,将第一个\视为转义字符,然后将第二个\视为实际值。如果不是,则第一个\后面的下一个字符将被解析为转义字符 以下是可用转义字符的列表: \' -
\
)。考虑路径<代码> C:\测试< /代码>。在文本可视化器中使用此路径检查字符串时,实际字符串为C:\\Test
为什么会这样?这让我很困惑,因为有时我可能想拆分路径(使用
string.split()
),但不得不想知道使用哪个字符串(一个或两个斜杠)。之所以使用\\
,是因为\
是一个转义字符,需要表示单个\
的路径
也就是说,将第一个\
视为转义字符,然后将第二个\
视为实际值。如果不是,则第一个\
后面的下一个字符将被解析为转义字符
以下是可用转义字符的列表:
\' - 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
。\
将被视为\
调试器可视化工具中的一个字符,它以字符串在C代码中显示的形式显示字符串。由于\
用于转义非逐字C字符串中的字符,\
是正确的转义形式。.Net不会在此处向字符串添加任何内容。您看到的是调试器如何选择显示字符串的效果。C#字符串可以用两种形式表示
- 逐字字符串:前缀为
@
符号,无需转义\
字符
- 普通字符串:标准C样式的字符串,其中
\\
字符需要自行转义
调试器将字符串文本显示为普通字符串而不是逐字字符串。不过,这只是一个显示问题,并不影响它的潜在价值。好的,所以上面的答案并不完全正确。因此,我将为下一个阅读本文的人添加我的发现
如果从外部源读取所述字符串,则不能使用上表中的任何字符拆分该字符串
i、 e
不会被那些字符分开。但是,内部创建的字符串可以正常工作
i、 e
对于从文件中读取文本的其他方法,这可能不适用。我不确定,因为我没有用其他方法测试。考虑到这一点,最好不要使用这些字符来分隔字符串 尽管如此,我不认为这就是调试器如此显示的原因,它只是需要一种能够显示控制字符的方法(就像c#需要一种解释控制字符的方法一样)@stefan-是的,我无法推测工具开发人员为什么要做他们所做的任何事情。@stefan:我想这就是Jeffrey所说的-可视化工具显示字符串,就像它们在代码中一样,并且它们在代码中包含控制字符。这是正确的。也要记住它可以被显示为@字符串。我正在考虑将+1改为-1;-)杰弗里说得对。在调试器窗口中使用文本可视化工具。看起来像一个望远镜图标。点击它。
string[] splitStrings = File.ReadAllText([path]).Split((char)7);
string[] splitStrings = "hello\agoodbye".Split((char)7);