; expected の原因と直し方
C#で最も頻繁に出るコンパイルエラーです。セミコロンの付け忘れをコンパイラがどう検出するかを理解すると、報告される列番号のずれにも対応できます。
エラーメッセージの読み方
Program.cs(3,23): error CS1002: ; expected
Program.cs- ファイル名
3- 行番号
23- 列番号 — この位置でコンパイラが解析に失敗しました
CS1002- エラーコード — 検索するとMicrosoftの解説ページが見つかります
; expected- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 class Program { 2 static void Main(string[] args) { 3 int count = 10 ^ 4 System.Console.WriteLine(count); 5 } 6 }
Program.cs(3,23): error CS1002: ; expected
C#は文の終わりをセミコロンで判断します。改行では文が終わりません。
直し方: (空) を ; にします。
広告
広告スロット(未設定)
パターン2
1 class Program { 2 static void Main(string[] args) { 3 System.Console.WriteLine("Hello") ^ 4 } 5 }
Program.cs(3,42): error CS1002: ; expected
メソッド呼び出しも1つの文です。閉じ括弧のあとにセミコロンが要ります。
直し方: (空) を ; にします。
パターン3
1 class Program { 2 static int Twice(int n) { 3 return n * 2 ^ 4 } 5 static void Main(string[] args) { 6 System.Console.WriteLine(Twice(3)); 7 } 8 }
Program.cs(3,21): error CS1002: ; expected
return文もセミコロンで閉じます。次の行に}があっても文は終わっていません。
直し方: (空) を ; にします。
パターン4
1 class Program { 2 static void Main(string[] args) { 3 double pi = 3.14 ^ 4 System.Console.WriteLine(pi); 5 } 6 }
Program.cs(3,25): error CS1002: ; expected
double型の宣言でも同じです。文の終わりには必ずセミコロンが必要です。
直し方: (空) を ; にします。
パターン5
1 class Program { 2 static void Main(string[] args) { 3 int a = 1; 4 int b = 2 ^ 5 System.Console.WriteLine(a + b); 6 } 7 }
Program.cs(4,18): error CS1002: ; expected
複数の変数宣言のうち、どれか1つでもセミコロンを忘れると同じエラーになります。
直し方: (空) を ; にします。
よくある誤解
報告される列番号は、次のトークンが現れる直前の位置です。実際に足りないのはその手前の式の末尾なので、位置がずれて見えることがあります。
実務での勘所
C#のコンパイラ(Roslyn)は、1つの構文エラーを見つけてもそこで解析を打ち切らず、可能な範囲で解析を続けて残りのコードもまとめて診断しようとします。そのため、セミコロン1つの書き忘れから、無関係に見える大量のエラーが連鎖して報告されることがあります。エラー一覧の中では、最初に報告されているものが本当の原因である可能性が最も高く、そこから順に直していくと後続のエラーが芋づる式に消えることがよくあります。