C#不会逃脱“\”?

时间:2011-04-29 23:33:13

标签: c#

  

可能重复:
  How to use “\” in a string without making it an escape sequence - C#?

当我使用像“\ themes \ default \ layout.png”这样的字符串时,为什么它会在C#中给我一个错误?在“d”和“l”位置?它说无法识别的逃逸序列。当我使用时,如何阻止它给我一个错误:“\”?

Thans

4 个答案:

答案 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"