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

可以理解,这是行不通的:

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

使用重复的双引号。

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

输出:

this "word" is escaped

使用双引号。

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

这应该有助于澄清您可能存在的任何问题:c#字面量

下面是链接内容的表格:

常规的文字 逐字直译 生成的字符串 “你好” @“你好” 你好 “反斜杠:\ \” @“反斜杠:\” 反斜杠:\ “引用:\”“ @“引用:“”“ 引用:“ “CRLF: \ r \ nPost CRLF” @“CRLF: CRLF” CRLF: Post CRLF

为了添加更多的信息,你的例子在没有@符号的情况下也能正常工作(它可以防止使用\转义),如下所示:

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

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

更新:与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

如文档所述:

简单的转义序列……被逐字解读。只有引号转义序列("")不逐字解释;它产生一个双引号。此外,对于逐字插值的字符串大括号转义序列({{和}})不逐字解释;它们产生单括号字符。