Code Fix

初級

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.53 にします。

この問題を解いてみる →

パターン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として扱えません。

直し方: true1 にします。

この問題を解いてみる →

よくある誤解

boolとintのように、C#では暗黙の変換ができない型の組み合わせが多くあります。C言語のような0/1相互変換は許されません。

まとめ

Cannot implicitly convert typeは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)