編譯錯誤 · error CS1513
} expected(缺少右花括號)
一個用 { 開啟的塊,到最後也沒等到它的 }。報錯裡的行號是編譯器彈盡糧絕的地方——通常是檔案最後一行——不是缺失 } 真正屬於的地方。
親眼看它發生
int x = 5;
if (x > 2)
{
Console.WriteLine("big");
if (x > 4)
{
Console.WriteLine("huge");
}
兩個塊開啟,只有一個關閉。編譯器讀到檔案末尾,發現外層 if 的塊還開著,於是在最後一行報 } expected——離案發現場十萬八千里。
int x = 5;
if (x > 2)
{
Console.WriteLine("big");
if (x > 4)
{
Console.WriteLine("huge");
}
}
花括號配平排查法(30 秒)
- 把游標放到出問題的函式或塊的開頭。
- 往下數:每個
{記+1,每個}記−1。 - 結尾應該歸零。哪裡"該歸零卻沒歸零"——缺失的花括號就在那裡(或它前面)。
Visual Studio / VS Code 裡點任意花括號會高亮它的配對。如果某個 { 高亮不出東西——孤兒找到了。
三種常見成因
1. 刪了一行,連花括號一起刪了
你刪掉了一個 if 或方法呼叫,卻留下了它的花括號——現在某個別的塊提前閉合,後面全錯位。症狀:你知道存在的變數冒出一堆奇怪的 CS0103,外加檔案末尾一條 CS1513。
2. 貼上程式碼,丟了尾巴
從教程複製的內容抓到了一切,唯獨少了最後那個 }——或者多抓了一個,那就變成映象錯誤 CS1022("型別或名稱空間定義中有額外的 }")。
3. 從上往下寫,忘了收口
最誠實的一種——長巢狀邏輯從頭寫到尾。能根治的寫法:敲下頭部的瞬間就把兩個花括號都打出來,再往中間填:
if (x > 2)
{
// 兩朵括號都存在之後,再填中間
}
為什麼編輯器會自動補花括號
你敲 { 時編輯器默默補上 }——那件略煩人的小事,存在的意義就是預防 CS1513。讓它開著,再用自動格式化(VS 裡 Ctrl+K, D)重排縮排——錯位的縮排是缺失花括號的藏身處。每個塊都對齊之後,孤兒花括號一眼可見。
常見問答
C# 裡的 CS1513 是什麼意思?
一個用 { 開啟的塊沒有被關閉。行號是編譯器無路可走的位置(常常是檔案末尾),不是花括號該在的地方。從出問題區域的開頭數 +1/−1,缺口自己現形。
怎麼快速找到缺失的花括號?
點花括號看配對高亮;先跑自動格式化讓縮排誠實——縮排不說謊之後,缺失的括號一眼可見。
排查清單
- 報錯的行號是編譯器放棄的地方,不是花括號該在的地方。
- 從出問題區域的開頭數 +1/−1,虧空定位缺口。
- 兩個花括號一起敲;中間後填。
- 除錯前先自動格式化——縮排會揭穿巢狀的謊言。
- 姊妹錯誤:CS1002(缺分號)同樣適用"往回看一行"規則。