Can I escape a double quote in a verbatim string literal?
C#StringEscapingLiteralsVerbatim StringC# Problem Overview
In a verbatim string literal (@"foo") in C#, backslashes aren't treated as escapes, so doing " to get a double quote doesn't work. Is there any way to get a double quote in a verbatim string literal?
This understandably doesn't work:
string foo = @"this \"word\" is escaped";
C# Solutions
Solution 1 - C#
Use a duplicated double quote.
@"this ""word"" is escaped";
outputs:
this "word" is escaped
Solution 2 - C#
Use double quotation marks.
string foo = @"this ""word"" is escaped";
Solution 3 - C#
For adding some more information, your example will work without the @
symbol (it prevents escaping with \), this way:
string foo = "this \"word\" is escaped!";
It will work both ways but I prefer the double-quote style for it to be easier working, for example, with filenames (with lots of \ in the string).
Solution 4 - C#
This should help clear up any questions you may have: C# literals
Here is a table from the linked content:
> Regular literal | Verbatim literal | Resulting string
>-|-|-
> "Hello"
| @"Hello"
| Hello
> "Backslash: \\"
| @"Backslash: \"
| Backslash: \
> "Quote: \""
| @"Quote: """
| Quote: "
> "CRLF:\r\nPost CRLF"
| @"CRLF:
|
Post CRLF"CRLF:
Post CRLF
Solution 5 - C#
As the documentation says:
> Simple escape sequences ... are interpreted literally. Only a quote escape sequence (""
) is not interpreted literally; it produces one double quotation mark. Additionally, in case of a verbatim interpolated string brace escape sequences ({{
and }}
) are not interpreted literally; they produce single brace characters.
Solution 6 - C#
Update: With C# 11 Preview feature - Raw String Literals
string foo1 = """
this "word" is escaped
""";
string foo2 = """this "word" is escaped""";
History:
There is a proposal open in GitHub for the C# language about having better support for raw string literals. One valid answer, is to encourage the C# team to add a new feature to the language (such as triple quote - like Python).
see https://github.com/dotnet/csharplang/discussions/89#discussioncomment-257343