与鼠标移到该代码段徘徊,当你得到消息: "\"
在这一行:
if (data[i] == "\" && data[i-1] == "\")
实际上不是一个错误,但类String
的意见/描述。使用反斜杠表示escape sequence。该文档告诉:
由反斜杠(\)后跟字母或数字组合组成的字符组合称为“转义序列”。要表示换行符,单引号或字符常量中的某些其他字符,必须使用转义序列。转义序列被视为单个字符,因此作为字符常量有效。
产生了困惑,因为编译器会认为你想有"
作为一个字符在字符串中当您使用\"
。这就是为什么intellisense仍然以string
的颜色标记该行的其余部分,直到找到在其前面没有反斜杠的"
。
可以使用@
操作,迫使该字符串被解释为是,那么反斜杠将成为又一个字符:
if (data[i] == @"\" && data[i-1] == @"\")
并且代码编译。
不幸的是,当i
为0时,您的循环会在第一次迭代中断裂。因为data
将不可索引-1。 如果你的问题是在两个连续的反斜杠之间放一个空格,我会建议一种不同的方法。
你可以使用简单的方法Replace
像这样:
string s = @"\(Nested \(parentheses\) dont need a backslash.\) \(But a single \\(parenthe)";
s = s.Replace(@"\\", @"\ \");
我不太明白data
阵列在代码中扮演哪个角色,但你也可以使用StringBuilder
StringBuilder builder = new StringBuilder();
builder.Append(@" \(Nested \(parentheses\) dont need a backslash.\) \(But a single \\(parenthe)");
builder.Replace(@"\\", @"\ \");
做
你的代码甚至不会编译。 '\'表示转义序列,'\“'实际上是双引号转义的方式。由于问题本身的语法着色显示,'”\“&& data [i-1] ==”'实际上是一个单独的串 –