Nicht erkannte Escape-Sequenz für Pfadzeichenfolgen mit Backslashes

87

Der folgende Code generiert einen Compilerfehler über eine "nicht erkannte Escape-Sequenz" für jeden Backslash:

string foo = "D:\Projects\Some\Kind\Of\Pathproblem\wuhoo.xml";

Ich denke, ich muss dem Backslash entkommen? Wie mache ich das?

Kjensen
quelle

Antworten:

219

Sie können entweder jedes Mal einen doppelten Backslash verwenden

string foo = "D:\\Projects\\Some\\Kind\\Of\\Pathproblem\\wuhoo.xml";

oder verwenden Sie das @ -Symbol

string foo = @"D:\Projects\Some\Kind\Of\Pathproblem\wuhoo.xml";
Brandon
quelle
Dies half auch dabei, ein Problem mit Html.TextBoxFor zu beheben, das ich hatte. Durch die Verwendung des @ vor dem regulären Ausdruck wurde die nicht erkannte Escape-Sequenz aufgelöst, bei der der doppelte Backslash fehlgeschlagen ist.
Joshua
26

Versuche dies:

string foo = @"D:\Projects\Some\Kind\Of\Pathproblem\wuhoo.xml";

Das Problem ist, dass in einer Zeichenfolge a \ein Escapezeichen ist. Mit dem @Zeichen weisen Sie den Compiler an, die Escape-Zeichen zu ignorieren.

Sie können auch mit der Flucht auskommen \:

string foo = "D:\\Projects\\Some\\Kind\\Of\\Pathproblem\\wuhoo.xml";
Josh
quelle
4
FWIW und um Googlebot zu helfen, ist der Begriff für @ "" ein "wörtliches Zeichenfolgenliteral". Obwohl ich auch gehört habe, dass es nur als "String-Literal" bezeichnet wird, schließt dies technisch das "reguläre String-Literal" von nur "" ein. msdn.microsoft.com/en-us/library/aa691090(VS.71).aspx
Mark Brackett
13
var foo = @"D:\Projects\Some\Kind\Of\Pathproblem\wuhoo.xml";
Piotr Czapla
quelle
Nebenbei
9

Wenn Ihre Zeichenfolge wie in Ihrem Beispiel ein Dateipfad ist, können Sie auch Dateipfade im Unix-Stil verwenden:

string foo = "D:/Projects/Some/Kind/Of/Pathproblem/wuhoo.xml";

Die anderen Antworten bieten jedoch allgemeinere Lösungen für das Entkommen von Zeichenfolgen in C #.

Scott Weinstein
quelle
5
string foo = "D:\\Projects\\Some\\Kind\\Of\\Pathproblem\\wuhoo.xml";

Dies wird funktionieren oder die vorherigen Beispiele auch. @ "..." bedeutet, dass Sie alles zwischen den Anführungszeichen wörtlich behandeln, damit Sie es tun können

@"Hello
world"

Einfügen einer wörtlichen Newline. Ich bin eher altmodisch und entkomme lieber "\" mit "\\"

Bob Kaufman
quelle
Aber doppelt "werden nicht wörtlich behandelt.
Flügelspieler Sendon