string (C# リファレンス)

string 型は、Unicode 文字のシーケンスを表します。文字数がゼロの場合もあります。string は、.NET Framework の String のエイリアスです。

string は参照型ですが、等値演算子 (== および !=) は、string オブジェクトの参照ではなく、値を比較するように定義されます。値を比較することで、文字列が等しいかを直感的にテストできます。次に例を示します。


      string a = "hello";
string b = "h";
// Append to contents of 'b'
b += "ello";
Console.WriteLine(a == b);
Console.WriteLine((object)a == (object)b);

文字列の内容が等しいので、"True"、"False" の順に表示されますが、a および b は同じ文字列インスタンスを参照しません。

+ 演算子は、文字列を連結します。


      string a = "good " + "morning";

これは、"good morning" を含む文字列オブジェクトを作成します。

文字列は変更不可です。文字列オブジェクトの作成後、そのコンテンツを変更することはできません。構文では変更可能に見えても、変更不可です。たとえば、このコードを作成すると、コンパイラは新しい文字列を格納する新しいシーケンス オブジェクトを生成し、変数 b には引き続き "h" が格納されます。


      string b = "h";
b += "ello";

[] 演算子は、string の各文字へのアクセスに使用できます。


      string str = "test";
char x = str[2];  // x = 's';

リテラル文字列は string 型であり、二重引用符で囲む形式と、@ と二重引用符で囲む形式の 2 とおりがあります。二重引用符で囲む場合は、リテラル文字列の前後に二重引用符 (") を付けます。

"good morning"  // a string literal

リテラル文字列には、エスケープ シーケンスを含む任意の文字リテラルを含めることができます。


      string a = "\\\u0066\n";

この文字列には、円記号 (\)、文字 f、および改行文字が含まれています。

Noteメモ :

エスケープ コード \udddd (dddd は 4 桁の数字) は、Unicode 文字 U + dddd を表します。8 桁の Unicode エスケープ コード \udddd\udddd も認識できます。

@ と二重引用符で囲む場合は、先頭に @ を付け、さらに、リテラル文字列の前後に二重引用符を付けます。次に例を示します。

@"good morning"  // a string literal

@ と二重引用符を使用した場合の利点は、エスケープ シーケンスが処理されないため、たとえば、完全修飾ファイル名が書きやすくなることです。

@"c:\Docs\Source\a.txt"  // rather than "c:\\Docs\\Source\\a.txt"

@ と二重引用符で囲まれた文字列中に二重引用符を含めるには、二重引用符を二重にします。

@"""Ahoy!"" cried the captain." // "Ahoy!" cried the captain.

また、参照 (/reference (メタデータのインポート)) 識別子が C# キーワードである場合も、@ 記号を使用します。

// keyword_string.cs
using System;
class TestClass 
{
   static void Main()
   {
      string a = "\u0068ello ";
      string b = "world";
      Console.WriteLine( a + b );
      Console.WriteLine( a + b == "hello world" );
   }
}

出力

hello world
True

詳細については、「C# 言語仕様」の次のセクションを参照してください。

  • 2.4.2 識別子

  • 2.4.4.5 リテラル文字列

  • 4.2.3 string 型

  • 7.9.7 文字列等値演算子

表示: