string (C# リファレンス)
更新 : 2007 年 11 月
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、および改行文字が含まれています。
メモ : |
---|
エスケープ コード \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.
また、C# キーワードである参照 (/reference (メタデータのインポート)) 識別子を使用する場合も、@ 記号を使用します。
C# での文字列の詳細については、「文字列 (C# プログラミング ガイド)」を参照してください。
使用例
class SimpleStringTest
{
static void Main()
{
string a = "\u0068ello ";
string b = "world";
Console.WriteLine( a + b );
Console.WriteLine( a + b == "Hello World" ); // == performs a case-sensitive comparison
}
}
/* Output:
hello world
False
*/
C# 言語仕様
詳細については、「C# 言語仕様」の次のセクションを参照してください。
2.4.2 識別子
2.4.4.5 リテラル文字列
4.2.3 string 型
7.9.7 文字列等値演算子