可能重复:
How to use “\” in a string without making it an escape sequence - C#?
当我使用像“\ themes \ default \ layout.png”这样的字符串时,为什么它会在C#中给我一个错误?在“d”和“l”位置?它说无法识别的逃逸序列。当我使用时,如何阻止它给我一个错误:“\”?
Thans
答案 0 :(得分:8)
您需要使用额外的\
string value = "\\themes\\default\\layout.png";
或使用@
符号:
string value = @"\themes\default\layout.png";
这将避免您将所有\
加倍。
或者,如果您正在处理路径(这似乎是您的路径),您可以使用Path.Combine方法:
string value = Path.Combine(@"\", "themes", "default", "layout.jpg");
答案 1 :(得分:1)
你正在使用反斜杠来逃避't'和'd'。如果你想逃避实际的反斜杠,你需要这样做:
"\\themes\\default\\layout.png"
答案 2 :(得分:1)
“常规”字符串文字将\
字符视为特殊字符,用于转义序列以快速在字符串中插入特殊字符 - 例如\n
用于插入换行符, \"
用于插入"
字符而不终止字符串,依此类推。
因此,要在“普通”字符串中插入反斜杠,必须插入相应的转义序列,不出所料,\\
;然后你会写你的情况:
"\\themes\\default\\layout.png"
无法转义反斜杠会导致奇怪的结果或错误,就像你得到的那样,因为编译器会尝试将其后面的几个反斜杠字母解释为转义序列;如果定义了这样的序列,你将得到不需要的字符(例如,第一个\t
被转义为制表符),如果不是(如\l
),你将收到有关未定义转义序列的错误
另一个选项,如果你不需要转义任何字符,就是使用所谓的“逐字”字符串文字:如果你在字符串前加上@
字符,那么转义序列将被禁用,并且编写的字符串将由编译器逐字记录。此规则的唯一例外是引号,可以通过“引用转义序列”插入逐字字符串,即""
。在你的情况下,你会写:
@"\themes\default\layout.png"
有关常规vs逐字字符串文字的详细信息,请查看their documentation。
答案 3 :(得分:0)
反斜杠被视为escape character。要么像字段一样在字符串中转义反斜杠本身:
"\\themes\\default\\layout.png"
或使用逐字字符串文字完全禁用转义:
@"\themes\default\layout.png"