在c#中的逐字字符串文字(@"foo")中,反斜杠不被视为转义,因此使用\"来获得双引号是行不通的。有没有办法在逐字串文字中获得双引号?
可以理解,这是行不通的:
string foo = @"this \"word\" is escaped";
在c#中的逐字字符串文字(@"foo")中,反斜杠不被视为转义,因此使用\"来获得双引号是行不通的。有没有办法在逐字串文字中获得双引号?
可以理解,这是行不通的:
string foo = @"this \"word\" is escaped";
当前回答
使用重复的双引号。
@"this ""word"" is escaped";
输出:
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
使用重复的双引号。
@"this ""word"" is escaped";
输出:
this "word" is escaped
如文档所述:
简单的转义序列……被逐字解读。只有引号转义序列("")不逐字解释;它产生一个双引号。此外,对于逐字插值的字符串大括号转义序列({{和}})不逐字解释;它们产生单括号字符。
使用双引号。
string foo = @"this ""word"" is escaped";
为了添加更多的信息,你的例子在没有@符号的情况下也能正常工作(它可以防止使用\转义),如下所示:
string foo = "this \"word\" is escaped!";
它可以双向工作,但我更喜欢双引号风格,因为它更容易工作,例如,文件名(字符串中有很多\)。