😲

C#ではシングルコーテーションとダブルコーテーションは違う

2022/12/22に公開

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