編譯錯誤 · 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 報的行號不對?
少分號讓編譯器把兩行粘成一個表示式,直到走不下去才報錯——位置在真正錯誤的下一行。所以一個漏分號常引發一串錯誤:修第一個、重編譯,其餘自動消失。
排查清單
- 報錯在第 N 行 → 先看第 N−1 行的末尾。
- 每條宣告、賦值、
return、break、continue和獨立呼叫都要;。 if/for/while的頭和閉}永遠不要。- 一次冒出一堆錯誤?修第一個、重新編譯——連鎖會塌。