Cannot implicitly convert type の原因と直し方
暗黙的に変換できない型同士を代入しようとしたときに出ます。string→intやbool→intなど、C#が許さない組み合わせを押さえておきましょう。
エラーメッセージの読み方
Program.cs(3,17): error CS0029: Cannot implicitly convert type 'string' to 'int'
Program.cs- ファイル名
3- 行番号
17- 列番号 — この位置でコンパイラが解析に失敗しました
CS0029- エラーコード — 検索するとMicrosoftの解説ページが見つかります
Cannot implicitly convert type 'string' to 'int'- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 class Program { 2 static void Main(string[] args) { 3 int n = "10"; ^ 4 System.Console.WriteLine(n); 5 } 6 }
Program.cs(3,17): error CS0029: Cannot implicitly convert type 'string' to 'int'
int型の変数に文字列を代入することはできません。暗黙の変換はコンパイルエラーになります。
直し方: "10" を 10 にします。
広告
広告スロット(未設定)
パターン2
1 class Program { 2 static void Main(string[] args) { 3 int price = 3.5; ^ 4 System.Console.WriteLine(price); 5 } 6 }
Program.cs(3,21): error CS0266: Cannot implicitly convert type 'double' to 'int'. An explicit conversion exists (are you missing a cast?)
doubleの値をintに代入するには明示的なキャストが必要です。暗黙の縮小変換は許されません。
直し方: 3.5 を 3 にします。
パターン3
1 class Program { 2 static void Main(string[] args) { 3 int flag = true; ^ 4 System.Console.WriteLine(flag); 5 } 6 }
Program.cs(3,20): error CS0029: Cannot implicitly convert type 'bool' to 'int'
C#のboolとintは別の型で、Cのように0/1として扱えません。
直し方: true を 1 にします。
よくある誤解
boolとintのように、C#では暗黙の変換ができない型の組み合わせが多くあります。C言語のような0/1相互変換は許されません。
まとめ
Cannot implicitly convert typeは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。