String literals

C# supports two forms of string literals: regular string literals and verbatim string literals. A regular string literal consists of zero or more characters enclosed in double quotes, as in "hello, world", and may include both simple escape sequences (such as \t for the tab character), and hexadecimal and Unicode escape sequences. A verbatim string literal consists of an @ character followed by a double-quote character, zero or more characters, and a closing double-quote character. [Example: A simple example is @"hello, world". end example] In a verbatim string literal, the characters between the delimiters are interpreted verbatim, with the only exception being a quote-escape-sequence. In particular, simple escape sequences, and hexadecimal and Unicode escape sequences are not processed in verbatim string literals. A verbatim string literal may span multiple lines. string-literal :: regular-string-literalverbatim-string-literalregular-string-literal :: "regular-string-literal-characters"regular-string-literal-characters :: regular-string-literal-characterregular-string-literal-charactersregular-string-literal-characterregular-string-literal-character :: single-regular-string-literal-charactersimple-escape-sequencehexadecimal-escape-sequenceunicode-escape-sequencesingle-regular-string-literal-character :: Any character except " (U+0022), \ (U+005C), and new-line-character verbatim-string-literal :: @"verbatim-string-literal-characters"verbatim-string-literal-characters :: verbatim-string-literal-characterverbatim-string-literal-charactersverbatim-string-literal-characterverbatim-string-literal-character :: single-verbatim-string-literal-characterquote-escape-sequencesingle-verbatim-string-literal-character :: Any character except " quote-escape-sequence :: ""

[Note: A character that follows a backslash character (\) in a regular-string-literal-character must be one of the following characters: ', ", \, 0, a, b, f, n, r, t, u, U, x, v. Otherwise, a compile-time error occurs. end note]

[Example: The example string a = "Happy birthday, Joel"; // Happy birthday, Joel string b = @"Happy birthday, Joel"; // Happy birthday, Joel string c = "hello \t world"; // hello world string d = @"hello \t world"; // hello \t world string e = "Joe said \"Hello\" to me"; // Joe said "Hello" to me string f = @"Joe said ""Hello"" to me"; // Joe said "Hello" to me string g = "\\\\server\\share\\file.txt"; // \\server\share\file.txt string h = @"\\server\share\file.txt"; // \\server\share\file.txt string i = "one\r\ntwo\r\nthree"; string j = @"one two three"; shows a variety of string literals. The last string literal, j, is a verbatim string literal that spans multiple lines. The characters between the quotation marks, including white space such as new line characters, are preserved verbatim. end example]

[Note: Since a hexadecimal escape sequence can have a variable number of hex digits, the string literal "\x123" contains a single character with hex value 123. To create a string containing the character with hex value 12 followed by the character 3, one could write "\x00123" or "\x12" + "3" instead. end note]

The type of a string-literal is string.
Each string literal does not necessarily result in a new string instance. When two or more string literals that are equivalent according to the string equality operator (14.9.7), appear in the same assembly, these string literals refer to the same string instance. [Example: For instance, the output produced by class Test { static void Main() { object a = "hello"; object b = "hello"; System.Console.WriteLine(a == b); } } is True because the two literals refer to the same string instance. end example]