編譯錯誤 · 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. 點檔案裡的第一個 {;大多數編輯器會高亮它的配對。
  2. 如果某個 } 什麼都高亮不出來,它就是沒有開頭的孤兒——刪掉。
  3. 或者從上往下數 +1/−1;第一次跌破負數的位置就是多餘的括號。
  4. 刪掉後跑自動格式化——如果佈局忽然對上了,你找對了。

這套在 Visual Studio、VS Code、Rider 裡都管用。這裡的引擎報的是和真實編譯器同一個錯誤碼,所以你可以直接在上面練。

常見問答

CS1022 是什麼意思?

右花括號比左花括號多一個。從上往下數 +1/−1,計數變負的地方就是要刪的括號。

CS1022 和 CS1513 的區別?

CS1022 是右括號太多;CS1513 是右括號太少。同樣的計數法,方向相反。

排查清單