9.4.4.5 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-literal
verbatim-string-literal
regular-string-literal::
" regular-string-literal-charactersopt "
regular-string-literal-characters::
regular-string-literal-character
regular-string-literal-characters regular-string-literal-character
regular-string-literal-character::
single-regular-string-literal-character
simple-escape-sequence
hexadecimal-escape-sequence
unicode-escape-sequence
single-regular-string-literal-character::
Any character except " (U+0022), \ (U+005C), and new-line-character
verbatim-string-literal::
@" verbatim-string-literal-charactersopt "
Chapter 9 Lexical structure
61
verbatim-string-literal-characters::
verbatim-string-literal-character
verbatim-string-literal-characters verbatim-string-literal-character
verbatim-string-literal-character::
single-verbatim-string-literal-character
quote-escape-sequence
single-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]
9.4.4.6 The null literal
null-literal::
null
The type of a null-literal is the null type.