为啥我们在尝试用另一个字符串替换它时使用带有“\”的@ [重复]

Posted

技术标签:

【中文标题】为啥我们在尝试用另一个字符串替换它时使用带有“\\”的@ [重复]【英文标题】:Why do we use @ with "\" while trying to replace it with another string [duplicate]为什么我们在尝试用另一个字符串替换它时使用带有“\”的@ [重复] 【发布时间】:2012-08-28 06:48:57 【问题描述】:

可能重复:What's the @ in front of a string in C#?

为什么我们使用@\ 替换为另一个使用string.replace(@"\","$$") 的字符串 我正在使用C# windows 应用程序

【问题讨论】:

erm,猜猜看,这至少出现过一次。 ***.com/questions/556133/… 使用谷歌google.co.uk/…得到答案也很简单 【参考方案1】:

字符串文字前面的@ 使其成为verbatim string literal,因此反斜杠\ 不需要加倍。您可以使用"\\" 代替@"\" 以获得相同的效果。

【讨论】:

【参考方案2】:

因为如果你不这样做,你就必须用\\ 逃脱\

@ 习惯了所谓的verbatim strings

【讨论】:

【参考方案3】:

在 C# 中,您可以在字符串前面加上 @ 以使其一字不差,因此您不需要转义特殊字符。

@"\"

等同于

"\\"

【讨论】:

【参考方案4】:

C# Language Specification 2.4.4.5 字符串文字状态:

C# 支持两种形式的字符串文字:常规字符串文字和 逐字字符串文字。

常规字符串文字由零个或多个括起来的字符组成 在双引号中,如 "hello",并且可能包括简单的转义 序列(例如 \t 表示制表符),以及十六进制和 Unicode 转义序列。

逐字字符串文字由一个 @ 字符后跟一个 双引号字符、零个或多个字符和一个结束符 双引号字符。一个简单的例子是@"hello"。逐字逐句 字符串文字,分隔符之间的字符被解释 逐字逐句,唯一的例外是引号转义序列。在 特别是简单的转义序列,以及十六进制和 Unicode 转义序列不在逐字字符串文字中处理。一种 逐字字符串文字可能跨越多行。

使用@ 字符的逐字字符串字面量使得在实用上转义几乎所有字符变得更容易一些,否则您必须在字符串中使用\ 字符单独转义。

注意:" 字符仍然需要转义,即使是逐字模式。

所以我会用它来节省时间,不必通过一个长字符串来转义所有需要转义的必要字符。

【讨论】:

【参考方案5】:

因为反斜杠被视为转义字符,如果您不使用“@”,则会收到“无法识别的转义序列”错误。使用 '@' 告诉编译器忽略转义字符。 this 可能会有所帮助。

【讨论】:

以上是关于为啥我们在尝试用另一个字符串替换它时使用带有“\”的@ [重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥用 textarea 替换文本会破坏我的表单?

用另一个字符串替换一个字符串的一部分

用另一个视图替换视图

在带有动态部分的bash脚本中搜索/替换[关闭]

用另一个字符替换字符串中的某些字符

用另一个替换特定字符串 - String#replaceAll()