} expected の原因と直し方
波括弧の対応が崩れたときに出ます。エラー行がファイル末尾やブロック末尾を指すため、原因箇所の特定にコツが要ります。
エラーメッセージの読み方
Program.cs(5,2): error CS1513: } expected
Program.cs- ファイル名
5- 行番号
2- 列番号 — この位置でコンパイラが解析に失敗しました
CS1513- エラーコード — 検索するとMicrosoftの解説ページが見つかります
} expected- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 class Program { 2 static void Main(string[] args) { 3 System.Console.WriteLine("Hello"); 4 ^ 5 }
Program.cs(5,2): error CS1513: } expected
Mainメソッドの閉じ括弧が足りません。コンパイラはファイル末尾まで読んでから対応が崩れていることに気づきます。
直し方: (空) を } にします。
広告
広告スロット(未設定)
パターン2
1 class Program { 2 static void Main(string[] args) { 3 int n = 3; 4 if (n > 0) { 5 System.Console.WriteLine("positive"); 6 ^ 7 } 8 }
Program.cs(8,2): error CS1513: } expected
if文の閉じ括弧が足りません。波括弧の対応はインデントを揃えて数えると見つけやすくなります。
直し方: (空) を } にします。
パターン3
1 class Program { 2 static void Main(string[] args) { 3 System.Console.WriteLine("A"); 4 } 5 ^
Program.cs(4,6): error CS1513: } expected
クラス自体の閉じ括弧が足りません。エラー行はファイル末尾を指しますが、原因はもっと上にあります。
直し方: (空) を } にします。
パターン4
1 class Program { 2 static void Main(string[] args) { 3 for (int i = 0; i < 3; i++) { 4 System.Console.WriteLine(i); 5 ^ 6 } 7 }
Program.cs(7,2): error CS1513: } expected
for文の閉じ括弧が足りません。波括弧の対応を数え間違えると起きやすいミスです。
直し方: (空) を } にします。
パターン5
1 class Program { 2 static void Main(string[] args) { 3 int x = 5; 4 while (x > 0) { 5 x--; 6 ^ 7 } 8 }
Program.cs(8,2): error CS1513: } expected
while文でも同様です。ファイル末尾まで読んでから対応の崩れに気づきます。
直し方: (空) を } にします。
よくある誤解
エラー行はファイルの終わり(またはブロックの終端)を指しますが、実際に閉じ忘れているのはもっと上の行です。インデントを揃えて対応を数えるほうが確実です。
実務での勘所
C# 10からは、ファイルスコープの名前空間宣言(namespace MyApp;のようにセミコロンで終える書き方)が使えるようになりました。従来のnamespace MyApp { ... }という波括弧で囲む書き方に比べて、ファイル全体のインデントが1段減り、対応を追うべき波括弧の数もその分減ります。ファイル内に名前空間が1つしか無い(ほとんどのプロジェクトがそうです)場合は、この新しい書き方に切り替えるだけで、この種のエラーの温床を1つ減らせます。