編譯錯誤 · error CS1002

; expected(缺少分號)

語句沒有在編譯器期望的地方結束。這是 C# 最常見的錯誤,它最有用的一條性質:真正的錯誤通常在報錯行的上一行。

親眼看它發生

int x = 5
Console.WriteLine(x);

仔細讀錯誤:它指向第 2 行——但漏掉的分號在第 1 行末尾。編譯器要等到看到 Console 出現在本該是 ;、運算子或 } 的位置,才發現問題。所以排查 CS1002 的口訣:

到報錯的那一行,然後看它上一行的末尾。

int x = 5;
Console.WriteLine(x);

到底什麼東西要分號?

語句以 ; 結尾;塊——帶 { … } 的東西——不要。整條規則就這一句:

int total = 0;                    // 宣告語句 → ;

for (int i = 1; i <= 3; i++)      // for(...) 本身 → 不要
{
    total += i;                   // 塊內 → 每條語句都要 ;
}                                 // 閉花括號 → 不要

if (total > 2)                    // 不要
{
    total++;                      // 要 ;
}                                 // 不要

Console.WriteLine(total);         // 要 ;

經典觸發場景

1. return 到一半

int Add(int a, int b)
{
    return a + b      // return 值後面忘了 ;
}

Console.WriteLine(Add(1, 2));

2. 方法呼叫獨佔一行

Console.WriteLine("working…")
Console.WriteLine("never reached");

3. 連鎖反應——一個分號產生五個錯誤

沒有分號,編譯器會把第一行和第二行粘成一個巨大的胡話表示式,然後在它 first 迷路的地方報錯。修第一個錯誤、重新編譯,其餘的常常自動蒸發。新手從最後一個錯誤開始修;編譯器從上往下讀,你也應該。

表親:CS1513(缺少右花括號)

漏分號的姐妹是漏花括號。同樣的排查套路,換個方向:報錯行是編譯器無路可走的地方——從那裡倒著數花括號。

常見問答

怎麼修 C# 裡的 CS1002?

語句沒在期望的位置結束。真正的錯誤通常在報錯行的上一行末尾——在那裡補分號。宣告、賦值、return、break、continue 和獨立呼叫要分號;if/for/while 圓括號頭和閉花括號不要。

為什麼 CS1002 報的行號不對?

少分號讓編譯器把兩行粘成一個表示式,直到走不下去才報錯——位置在真正錯誤的下一行。所以一個漏分號常引發一串錯誤:修第一個、重編譯,其餘自動消失。

排查清單