编译错误 · 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的头和闭}永远不要。- 一次冒出一堆错误?修第一个、重新编译——连锁会塌。