編譯錯誤 · 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. 把游標放到出問題的函式或塊的開頭。
  2. 往下數:每個 { 記 +1,每個 } 記 −1。
  3. 結尾應該歸零。哪裡"該歸零卻沒歸零"——缺失的花括號就在那裡(或它前面)。

Visual Studio / VS Code 裡點任意花括號會高亮它的配對。如果某個 { 高亮不出東西——孤兒找到了。

三種常見成因

1. 刪了一行,連花括號一起刪了

你刪掉了一個 if 或方法呼叫,卻留下了它的花括號——現在某個別的塊提前閉合,後面全錯位。症狀:你知道存在的變數冒出一堆奇怪的 CS0103,外加檔案末尾一條 CS1513。

2. 貼上程式碼,丟了尾巴

從教程複製的內容抓到了一切,唯獨少了最後那個 }——或者多抓了一個,那就變成映象錯誤 CS1022("型別或名稱空間定義中有額外的 }")。

3. 從上往下寫,忘了收口

最誠實的一種——長巢狀邏輯從頭寫到尾。能根治的寫法:敲下頭部的瞬間就把兩個花括號都打出來,再往中間填:

if (x > 2)
{
    // 兩朵括號都存在之後,再填中間
}

為什麼編輯器會自動補花括號

你敲 { 時編輯器默默補上 }——那件略煩人的小事,存在的意義就是預防 CS1513。讓它開著,再用自動格式化(VS 裡 Ctrl+K, D)重排縮排——錯位的縮排是缺失花括號的藏身處。每個塊都對齊之後,孤兒花括號一眼可見。

常見問答

C# 裡的 CS1513 是什麼意思?

一個用 { 開啟的塊沒有被關閉。行號是編譯器無路可走的位置(常常是檔案末尾),不是花括號該在的地方。從出問題區域的開頭數 +1/−1,缺口自己現形。

怎麼快速找到缺失的花括號?

點花括號看配對高亮;先跑自動格式化讓縮排誠實——縮排不說謊之後,缺失的括號一眼可見。

排查清單