😲
C#ではシングルコーテーションとダブルコーテーションは違う
C#をやっている方々は常識かもしれませんが、他プログラミング言語畑からきた自分は引っかかったのでまとめてみました。
C#におけるシングルコーテーションとダブルコーテーションの違い
C#には「文字」を扱うchar
型と、「文字列」を扱うstring
型があります。
C#においてシングルコーテーションは文字に対して使用し、ダブルコーテーションは文字列に対して使用します。
したがって、char
型変数に対してダブルコーテーションで囲った文字を代入することはできません。
// NG
char c = "A";
逆もしかりで、string
型変数に対してシングルコーテーションで囲った文字列を代入することはできません。(そもそも文字列はシングルコーテーションで囲めない。)
// NG
string str = 'ABC';
何で引っかかったの?
C#ではString
クラスのコンストラクタを使って、char
型の配列から文字列を生成することができます。
char[] char_list = new char[3] {'A', 'B', 'C'};
string str = new String(char_list); // str="ABC"
このString
クラスのコンストラクタですが、ドキュメントを見ると分かるように、string
型を引数として与えることはできません。つまり、引数にダブルコーテーションで囲った文字を指定することはできません。たとえ1文字であっても、ダブルコーテーションで囲むと文字列として認識されるためです。
// NG
string str = new String("A", 3);
これを実行すると、以下のようなエラーが出力されます。
Compilation failed: 2 error(s), 0 warnings
Main.cs(5,22): error CS1502: The best overloaded method match for `string.String(char, int)' has some invalid arguments
/***/***/***/mscorlib.dll (Location of the symbol related to previous error)
Main.cs(5,33): error CS1503: Argument `#1' cannot convert `string' expression to type `char'
きちんとシングルコーテーションで囲いましょう。
// OK
string str = new String('A', 3);
Discussion