ChatGPT解决这个技术问题 Extra ChatGPT

Can I escape a double quote in a verbatim string literal?

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";
The most comprehensive answer is rfonn's answer (e.g., for folks ending up here from a search engine, e.g. searching for "escape quotes C#")

P
Palec

Use a duplicated double quote.

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

outputs:

this "word" is escaped

I'm trying to use @Html.Raw() and the quadruple quote breaks my string
Can you use it without the string literal? It seems like Html.Raw() would take care of ensuring it's a string for you...
It's also possible to use it in combination with string interpolation: $@"this ""{wordVar}"" is escaped";.
Perhaps be explicit about whether this is the only way or not? What about later developments, like C# 6? (But without "Edit:", "Update:", or similar - the answer should appear as if it was written today.)
B
Brandon

Use double quotation marks.

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

M
Mark Mayo

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).


N
Nick

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


What about escaping of { and }?
@PeterMortensen - Neither of those syntaxes require any escape for { or }. Are you thinking of interpolated string syntax $?
P
Peter Mortensen

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.


NOTE: only interpolated string syntax $"..." requires escaping of { and }. Regular strings "..." and verbatim strings @"..." do not require those to be escaped.
K
Kind Contributor

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


This got upgraded to a real proposal github.com/dotnet/csharplang/issues/4304, and now it's in the C#11 Preview! see docs.microsoft.com/en-us/dotnet/csharp/whats-new/…