Die Nachricht, die Sie erhalten, wenn Sie mit der Maus über dieses Stück Code schwebt: "\"
in dieser Zeile:
if (data[i] == "\" && data[i-1] == "\")
ist eigentlich kein Fehler, sondern der Kommentar/Beschreibung der Klasse String
.
Ein Backslash wird verwendet, um eine escape sequence zu bezeichnen. Die Dokumentation sagt:
Zeichenkombinationen bestehend aus einem Backslash (\) gefolgt von einem Buchstaben oder einer Kombination von Ziffern werden "Escape-Sequenzen" genannt. Um ein Zeilenvorschubzeichen, ein einfaches Anführungszeichen oder bestimmte andere Zeichen in einer Zeichenkonstante darzustellen, müssen Sie Escape-Sequenzen verwenden. Eine Escape-Sequenz wird als einzelnes Zeichen betrachtet und ist daher als Zeichenkonstante gültig.
Die Verwirrung entsteht, weil der Compiler denkt, dass Sie die "
als ein Zeichen in der Zeichenfolge haben möchten, wenn Sie \"
verwenden. Aus diesem Grund markiert Intellisense immer noch den Rest der Zeile in der Farbe string
bis zu dem Punkt, wo es eine "
ohne Backslash vor findet.
können Sie den @
Operator verwenden, um die Zeichenfolge zu zwingen, zu interpretieren, wie es ist, so wird ein Schrägstrich wird nur ein Zeichen:
if (data[i] == @"\" && data[i-1] == @"\")
und Ihr Code wird übersetzbar.
Leider würde Ihre Schleife in der ersten Iteration brechen, wenn i
0 ist. Weil data
nicht mit -1 indiziert werden kann. Ich würde einen anderen Ansatz vorschlagen, wenn Ihr Problem ist, ein Leerzeichen zwischen zwei aufeinanderfolgenden Backslashes zu setzen.
Sie konnten verwenden Sie einfach die Replace
Methode wie folgt:
string s = @"\(Nested \(parentheses\) dont need a backslash.\) \(But a single \\(parenthe)";
s = s.Replace(@"\\", @"\ \");
Ich verstehe nicht ganz, welche Rolle die data
Array im Code spielt, aber Sie können es auch tun, mit dem StringBuilder
StringBuilder builder = new StringBuilder();
builder.Append(@" \(Nested \(parentheses\) dont need a backslash.\) \(But a single \\(parenthe)");
builder.Replace(@"\\", @"\ \");
Ihr Code wird nicht einmal kompilieren. '\ 'bezeichnet eine Escape-Sequenz und' \ "' ist eigentlich die Möglichkeit, doppelte Anführungszeichen zu umgehen. Wie die Syntax-Einfärbung in der Frage selbst zeigt, ist '" \ "&& data [i-1] ==" 'tatsächlich eine einzelne Zeichenfolge –