string (C# リファレンス)string (C# Reference)

string 型は、0 個以上の Unicode 文字のシーケンスを表します。The string type represents a sequence of zero or more Unicode characters. string は .NET の String の別名です。string is an alias for String in .NET.

string は参照型ですが、等値演算子 (== および !=) は、string オブジェクトの参照ではなく、値を比較するように定義されています。Although string is a reference type, the equality operators (== and !=) are defined to compare the values of string objects, not references. これにより、文字列が等しいかを直感的にテストできます。This makes testing for string equality more intuitive. 次に例を示します。For example:

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 は同じ文字列インスタンスを参照しません。This displays "True" and then "False" because the content of the strings are equivalent, but a and b do not refer to the same string instance.

+ 演算子は、文字列を連結します。The + operator concatenates strings:

string a = "good " + "morning";

これは、"good morning" を含む文字列オブジェクトを作成します。This creates a string object that contains "good morning".

文字列は "変更不可" です。文字列オブジェクトの作成後、そのコンテンツを変更することはできません。構文では変更可能に見えても、変更不可です。Strings are immutable--the contents of a string object cannot be changed after the object is created, although the syntax makes it appear as if you can do this. たとえば、このコードを作成すると、コンパイラによって新しい文字列オブジェクトを格納する新しいシーケンス オブジェクトが生成され、その新しいオブジェクトが b に割り当てられます。For example, when you write this code, the compiler actually creates a new string object to hold the new sequence of characters, and that new object is assigned to b. そして、文字列 "h" がガベージ コレクションの対象になります。The string "h" is then eligible for garbage collection.

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

[] 演算子は、string の各文字への読み取り専用アクセスに使用できます。The [] operator can be used for readonly access to individual characters of a string:

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

同様に、[] 演算子を使って string 内の各文字を反復処理することもできます。In similar fashion, the [] operator can also be used for iterating over each character in a string:

string str = "test";

for (int i = 0; i < str.Length; i++)
{
  Console.Write(str[i] + " ");
}
// Output: t e s t

リテラル文字列は string 型であり、二重引用符で囲む形式と、@-quoted 付きの二重引用符で囲む形式の 2 種類があります。String literals are of type string and can be written in two forms, quoted and @-quoted. 二重引用符で囲む場合は、リテラル文字列の前後に二重引用符 (") を付けます。Quoted string literals are enclosed in double quotation marks ("):

"good morning"  // a string literal

リテラル文字列には、任意の文字リテラルを含めることができます。String literals can contain any character literal. これにはエスケープ シーケンスが含まれます。Escape sequences are included. 次の例では、円記号にエスケープ シーケンス \\、文字 f に \u0066、改行に \n を使用しています。The following example uses escape sequence \\ for backslash, \u0066 for the letter f, and \n for newline.

string a = "\\\u0066\n";
Console.WriteLine(a);

注意

エスケープ コード \udddd (dddd は 4 桁の数字) は、Unicode 文字 U +dddd を表します。The escape code \udddd (where dddd is a four-digit number) represents the Unicode character U+dddd. 8 桁の Unicode エスケープ コード \Udddddddd も認識できます。Eight-digit Unicode escape codes are also recognized: \Udddddddd.

verbatim 文字列リテラルの場合は、先頭に @ を付け、さらに前後に二重引用符を付けます。Verbatim string literals start with @ and are also enclosed in double quotation marks. 次に例を示します。For example:

@"good morning"  // a string literal

verbatim 文字列の場合の利点は、エスケープ シーケンスが "処理されない" ため、たとえば、完全修飾ファイル名が書きやすくなることです。The advantage of verbatim strings is that escape sequences are not processed, which makes it easy to write, for example, a fully qualified file name:

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

@-quoted に続いて引用符で囲まれた文字列に二重引用符を含めるには、二重引用符を二重にします。To include a double quotation mark in an @-quoted string, double it:

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

@ 特殊文字のその他の使用については、@ -- 逐語的識別子に関するページを参照してください。For other uses of the @ special character, see @ -- verbatim identifier.

C# での文字列の詳細については、「文字列」を参照してください。For more information about strings in C#, see Strings.

Example

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# language specification

詳細については、「C# 言語の仕様」を参照してください。For more information, see the C# Language Specification. 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。The language specification is the definitive source for C# syntax and usage.

関連項目See also