編譯錯誤 · error CS1022
應輸入型別、名稱空間定義或檔案結尾
這句編譯器黑話的直譯是:你多了一個右花括號。有個 } 已經沒有任何塊可以閉合了。
親眼看它發生
int x = 5;
Console.WriteLine(x);
} // ← 前面沒有開過任何塊,這個括號無處閉合
它是 CS1513 的映象
| 錯誤 | 含義 | 修法 |
|---|---|---|
CS1513 — 應輸入 } | 右花括號太少 | 補上缺失的 } |
| CS1022 | 右花括號太多 | 刪掉多餘的 } |
診斷方法完全相同,方向相反。從檔案開頭數:{ 加一,} 減一。如果計數變成負數,你剛剛越過了那個多餘的括號。
常見成因
1. 複製貼上多帶了一個括號
class Greeter
{
public void Hello()
{
Console.WriteLine("hi");
}
} // 閉合 class
} // ← 不小心粘了兩遍
2. 刪了塊,括號留下了
你刪掉一個 if 或方法,卻留下了它的右花括號。症狀常常是一串迷惑性的級聯錯誤:它後面的所有東西看起來都跑到類外面去了。
3. 重新格式化時括號合併了
自動格式化修不好括號數量——它只能對齊已有的東西。如果兩個塊被合併,先靠肉眼對齊縮排,找那一行縮排和鄰居不符的。
20 秒修好它
- 點檔案裡的第一個
{;大多數編輯器會高亮它的配對。 - 如果某個
}什麼都高亮不出來,它就是沒有開頭的孤兒——刪掉。 - 或者從上往下數 +1/−1;第一次跌破負數的位置就是多餘的括號。
- 刪掉後跑自動格式化——如果佈局忽然對上了,你找對了。
這套在 Visual Studio、VS Code、Rider 裡都管用。這裡的引擎報的是和真實編譯器同一個錯誤碼,所以你可以直接在上面練。
常見問答
CS1022 是什麼意思?
右花括號比左花括號多一個。從上往下數 +1/−1,計數變負的地方就是要刪的括號。
CS1022 和 CS1513 的區別?
CS1022 是右括號太多;CS1513 是右括號太少。同樣的計數法,方向相反。
排查清單
- 從檔案開頭數
{(+1)和}(−1)。 - 第一個變負的點 = 多餘的括號。
- 貼上過程式碼?檢查貼上區域的結尾。
- 刪過塊?檢查它的括號是否留下來了。
- 修完跑自動格式化,確認結構沒問題。