Colonel Panic
Colonel Panic

Reputation: 137752

How to express a string literal containing double quotes without escape characters?

Is there a C# syntax with which I can express strings containing double quotes without having to escape them? I frequently copy and paste strings between C# source code to other apps, and it's frustrating to keep adding and removing backslashes.

Eg. presently for the following string (simple example)

"No," he said.

I write in C# "\"No,\" he said."

But I'd rather write something like Python '"No," he said.', or Ruby %q{"No," he said.}, so I can copy and paste the contents verbatim to other apps.

Upvotes: 11

Views: 12257

Answers (3)

Colonel Panic
Colonel Panic

Reputation: 137752

Update 2022: C# 11 in Visual Studio 2022 version 17.2 (or later) supports raw string literals between """ https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-11#raw-string-literals

Raw string literals are a new format for string literals. Raw string literals can contain arbitrary text, including whitespace, new lines, embedded quotes, and other special characters without requiring escape sequences. A raw string literal starts with at least three double-quote (""") characters. It ends with the same number of double-quote characters. Typically, a raw string literal uses three double quotes on a single line to start the string, and three double quotes on a separate line to end the string. The newlines following the opening quote and preceding the closing quote aren't included in the final content:

Example

string longMessage = """
    This is a long message.
    It has several lines.
        Some are indented
                more than others.
    Some should start at the first column.
    Some have "quoted text" in them.
    """;

Upvotes: 8

Barry Kaye
Barry Kaye

Reputation: 7759

You could try this but you're still effectively escaping:

string s = @"""No,"" he said.";

Upvotes: 5

Jon Skeet
Jon Skeet

Reputation: 1503409

I frequently copy and paste strings between C# source code to other apps, and it's frustrating to keep adding and removing backslashes.

Then it sounds like you probably shouldn't have the strings within source code.

Instead, create text files which are embedded in your assembly, and load them dynamically... or create resource files so you can look up strings by key.

There's no form of string literal in C# which would allow you to express a double-quote as just a single double-quote character in source code.

Upvotes: 14

Related Questions