Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么.NET在路径中已经存在的斜杠上再添加一个斜杠?_C#_Visual Studio_Debugging - Fatal编程技术网

C# 为什么.NET在路径中已经存在的斜杠上再添加一个斜杠?

C# 为什么.NET在路径中已经存在的斜杠上再添加一个斜杠?,c#,visual-studio,debugging,C#,Visual Studio,Debugging,我注意到C在路径中添加了额外的斜杠(\)。考虑路径 C:\测试< /代码>。在文本可视化器中使用此路径检查字符串时,实际字符串为C:\\Test 为什么会这样?这让我很困惑,因为有时我可能想拆分路径(使用string.split()),但不得不想知道使用哪个字符串(一个或两个斜杠)。之所以使用\\,是因为\是一个转义字符,需要表示单个\的路径 也就是说,将第一个\视为转义字符,然后将第二个\视为实际值。如果不是,则第一个\后面的下一个字符将被解析为转义字符 以下是可用转义字符的列表: \' -

我注意到C在路径中添加了额外的斜杠(
\
)。考虑路径<代码> 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);