印刷用ページ       送信     
クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
Visual Studio .NET
製品ドキュメント
Visual Basic と Visual C#
リファレンス
Visual C# 言語
C# 言語仕様
2. 構文の構造
2.4 トークン
2.4.4 リテラル
 2.4.4.5 リテラル文字列
C# 言語の仕様
2.4.4.5 リテラル文字列

C# では、標準リテラル文字列と逐語的リテラル文字列という 2 種類のリテラル文字列がサポートされています。

標準リテラル文字列は、"hello" のように 0 個以上の文字を二重引用符で囲んで指定し、単純なエスケープ シーケンス (タブ文字に対する \t など) でも、16 進数および Unicode のエスケープ シーケンスでも含むことができます。

逐語的リテラル文字列は、@ 文字、二重引用符、0 個以上の文字、および閉じる二重引用符で構成されています。@"hello" は逐語的リテラル文字列の簡単な例です。逐語的リテラル文字列では、区切り記号の間の文字は、逐語的に解釈されます。ただし、quote-escape-sequence だけは例外です。特に、単純なエスケープ シーケンス、16 進数および Unicode のエスケープ シーケンスは、逐語的リテラル文字列では処理されません。逐語的リテラル文字列は、複数の行にわたることができます。

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:
" (U+0022)、\ (U+005C)、および new-line-character を除く任意の文字
verbatim-string-literal:
@"   verbatim -string-literal-charactersopt   "
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:
" を除く任意の文字
quote-escape-sequence:
""

regular-string-literal-character 内の円記号 (\) の後には、'"\0abfnrtuUxv のいずれかの文字を指定する必要があります。それ以外の場合は、コンパイル エラーが発生します。

次に例を示します。

string a = "hello, world";                  // hello, world
string b = @"hello, world";               // hello, world
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";

これらは、さまざまなリテラル文字列の例です。最後のリテラル文字列 j は、複数の行にまたがる逐語的リテラル文字列の例です。引用符の間にある文字は、改行文字などの空白記号を含めて、そのまま維持されます。

16 進値のエスケープ シーケンスで指定できる 16 進数字の個数は可変であるため、リテラル文字列 "\x123" には、123 という 16 進値の 1 個の文字が含まれます。12 という 16 進値の文字に続けて 3 という文字を含む文字列を作成するには、"\x00123" または "\x12" + "3" と記述します。

string-literal の型は string です。

リテラル文字列ごとに新しい文字列インスタンスが作成されるとは限りません。同じアセンブリ内の複数のリテラル文字列が文字列等値演算子 (7.9.7 を参照) によって等しくなっている場合、これらのリテラル文字列は同じ文字列インスタンスを参照します。たとえば、次のようなプログラムを考えます。

class Test
{
   static void Main() {
      object a = "hello";
      object b = "hello";
      System.Console.WriteLine(a == b);
   }
}

この例の 2 つのリテラルは同じ文字列インスタンスを参照しているため、出力は True になります。

© 2009 Microsoft Corporation. All rights reserved. 使用条件 | 商標 | プライバシー
Page view tracker