569

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

这可以理解是行不通的:

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

6 回答 6

909

使用重复的双引号。

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

输出:

this "word" is escaped
于 2009-12-18T15:37:27.823 回答
118

使用双引号。

string foo = @"this ""word"" is escaped";
于 2009-12-18T15:37:37.573 回答
96

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

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

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

于 2009-12-18T15:51:39.697 回答
87

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

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

正则字面量 逐字逐句 结果字符串
"Hello" @"Hello" Hello
"Backslash: \\" @"Backslash: \" Backslash: \
"Quote: \"" @"Quote: """ Quote: "
"CRLF:\r\nPost CRLF" @"CRLF:
Post CRLF"
CRLF:
Post CRLF
于 2009-12-18T15:42:30.547 回答
0

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

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

于 2021-01-04T00:12:58.030 回答
0

正如文档所说:

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

于 2021-03-18T09:16:38.287 回答