【发布时间】:2025-12-23 14:05:06
【问题描述】:
为什么我们使用@ 将\ 替换为另一个使用string.replace(@"\","$$") 的字符串
我正在使用C# windows 应用程序
【问题讨论】:
-
erm,猜猜看,这至少出现过一次。 *.com/questions/556133/…
-
使用谷歌google.co.uk/…得到答案也很简单
为什么我们使用@ 将\ 替换为另一个使用string.replace(@"\","$$") 的字符串
我正在使用C# windows 应用程序
【问题讨论】:
字符串文字前面的@ 使其成为verbatim string literal,因此反斜杠\ 不需要加倍。您可以使用"\\" 代替@"\" 以获得相同的效果。
【讨论】:
因为如果你不这样做,你就必须用\\ 逃脱\
@ 习惯了所谓的verbatim strings
【讨论】:
在 C# 中,您可以在字符串前面加上 @ 以使其一字不差,因此您不需要转义特殊字符。
@"\"
等同于
"\\"
【讨论】:
C# Language Specification 2.4.4.5 字符串文字状态:
C# 支持两种形式的字符串文字:常规字符串文字和 逐字字符串文字。
常规字符串文字由零个或多个括起来的字符组成 在双引号中,如 "hello",并且可能包括简单的转义 序列(例如 \t 表示制表符),以及十六进制和 Unicode 转义序列。
逐字字符串文字由一个 @ 字符后跟一个 双引号字符、零个或多个字符和一个结束符 双引号字符。一个简单的例子是@"hello"。逐字逐句 字符串文字,分隔符之间的字符被解释 逐字逐句,唯一的例外是引号转义序列。在 特别是简单的转义序列,以及十六进制和 Unicode 转义序列不在逐字字符串文字中处理。一种 逐字字符串文字可能跨越多行。
使用@ 字符的逐字字符串字面量使得在实用上转义几乎所有字符变得更容易一些,否则您必须在字符串中使用\ 字符单独转义。
注意:" 字符仍然需要转义,即使是逐字模式。
所以我会用它来节省时间,不必通过一个长字符串来转义所有需要转义的必要字符。
【讨论】:
因为反斜杠被视为转义字符,如果您不使用“@”,则会收到“无法识别的转义序列”错误。使用 '@' 告诉编译器忽略转义字符。 this 可能会有所帮助。
【讨论】: