ChatGPT解决这个技术问题 Extra ChatGPT

我可以在逐字字符串文字中转义双引号吗?

在 C# 中的逐字字符串文字 (@"foo") 中,反斜杠不被视为转义,因此使用 \" 来获取双引号是行不通的。有没有办法在逐字字符串文字中获取双引号?

这可以理解是行不通的:

string foo = @"this \"word\" is escaped";
最全面的答案是 rfonn's answer(例如,对于从搜索引擎到这里的人,例如搜索“escape quotes C#”)

P
Palec

使用重复的双引号。

@"this ""word"" is escaped";

输出:

this "word" is escaped

我正在尝试使用 @Html.Raw() 并且四引号破坏了我的字符串
你可以在没有字符串文字的情况下使用它吗?似乎 Html.Raw() 会确保它是你的字符串......
也可以将它与字符串插值结合使用:$@"this ""{wordVar}"" is escaped";
也许明确说明这是否是唯一的方法?那么后来的发展呢,比如 C# 6? (但没有“编辑:”、“更新:”或类似的 - 答案应该看起来好像是今天写的。)
B
Brandon

使用双引号。

string foo = @"this ""word"" is escaped";

M
Mark Mayo

为了添加更多信息,您的示例将在没有 @ 符号的情况下工作(它可以防止使用 \ 转义),这样:

string foo = "this \"word\" is escaped!";

它可以双向工作,但我更喜欢双引号样式,因为它更容易工作,例如,使用文件名(字符串中有很多 \)。


N
Nick

这应该有助于解决您可能遇到的任何问题:C# literals

这是来自链接内容的表格:

常规文字 逐字文字 结果字符串 "Hello" @"Hello" Hello "Backslash: \\" @"Backslash: \" Backslash: \ "Quote: \"" @"Quote: """ Quote: " "CRLF:\r \n发布 CRLF" @"CRLF: 发布 CRLF" CRLF: 发布 CRLF


{} 的转义怎么办?
@PeterMortensen - 这些语法都不需要对 {} 进行任何转义。您在考虑 interpolated string 语法 $ 吗?
P
Peter Mortensen

正如 the documentation 所说:

简单的转义序列......按字面意思解释。只有引号转义序列 ("") 不会按字面解释;它产生一个双引号。此外,在逐字插入字符串大括号转义序列({{ 和 }})的情况下,不会按字面解释;他们产生单大括号字符。


注意: interpolated string 语法 $"..." 需要转义 {}。常规字符串 "..." 和逐字字符串 @"..." 不需要转义。
K
Kind Contributor

更新:使用 C# 11 预览功能 - 原始字符串文字

string foo1 = """
   this "word" is escaped
   """;

string foo2 = """this "word" is escaped""";

历史:

GitHub 上有一个关于 C# 语言的提案,关于更好地支持原始字符串文字。一个有效的答案是鼓励 C# 团队向该语言添加新功能(例如三引号 - 像 Python)。

https://github.com/dotnet/csharplang/discussions/89#discussioncomment-257343


这已升级为真正的提案 github.com/dotnet/csharplang/issues/4304,现在它在 C#11 预览版中!见docs.microsoft.com/en-us/dotnet/csharp/whats-new/…