T.Todua
T.Todua

Reputation: 56371

Any way to use string (without escaping manually) that contains double quotes

Let's say I want to assign a text (which contains many double quotes) into variable. However, the only way seems to manually escape:

string t = "Lorem \"Ipsum\" dummy......
//or//
string t = @"Lorem ""Ipsum"" dummy.....

Is there any way to avoid manual escaping, and instead use something universal (which I dont know in C#) keywoard/method to do that automatically? In PHP, it's untoldly simple, by just using single quote:

$t = 'Lorem "Ipsum" dummy .......

btw, please don't bomb me with critiques "Why do you need to use that" or etc. I need answer to the question what I ask.

Upvotes: 1

Views: 1580

Answers (2)

Cee McSharpface
Cee McSharpface

Reputation: 8726

No. In C# syntax, the only way to define string literals is the use of the double quote " with optional modifiers @ and/or $ in front. The single quote is the character literal delimiter, and cannot be used in the way PHP would allow - in any version, including the current 8.0.
Note that the PHP approach suffers from the need to escape ' as well, which is, especially in the English language, frequently used as the apostrophe.

To back that up, the EBNF of the string literal in current C# is still this:

regular_string_literal '"' { regular_string_literal_character } '"'

The only change in the compiler in version 8.0 was that now, the order of the prefix modifiers $ (interpolated) and @ (verbatim) can be either @$ or $@; it used to matter annoyingly in earlier versions.

Alternatives:

Save it to a file and use File.ReadAllText for the assignment, or embed it as a managed ressource, then the compiler will provide a variable in the namespace of your choice with the verbatim text as its runtime value.

Or use single quotes (or any other special character of your choice), and go

var t = @"Text with 'many quotes' inside".Replace("'", @"""");

where the Replace part could be modeled as an extension to the String class for brevity.

Upvotes: 2

user6440521
user6440521

Reputation:

I know this answer may not be satisfying, but C# sytnax simply won't allow you to do such thing (at the time of writing this answer).

I think the best solution is to use resources. Adding/removing and using strings from resources is super easy:

internal class Program
{
    private static void Main(string[] args)
    {
        string myStringVariable = Strings.MyString;

        Console.WriteLine(myStringVariable);
    }
}

The Strings is the name of the resources file without the extension (resx):

enter image description here

MyString is the name of your string in the resources file:

enter image description here

I may be wrong, but I conjecture this is the simplest solution.

Upvotes: 5

Related Questions