編譯錯誤 · error CS1525

無效的表示式項"X"

編譯器正在讀一個表示式——一個必須有值出現的位置——卻撞上了標點。本該裝值的槽位是空的。

親眼看它發生

int x = ;   // = 右邊必須是一個值

形態一:空的初始化

string name = ;
string name = "(未命名)";
Console.WriteLine(name);

形態二:懸空的運算子

運算子沒有運算元也是同一個問題——它需要一個運算元:

int total = 10 + ;   // + 需要右邊的值
int total = 10 + 5;
Console.WriteLine(total);

形態三:空括號

bool ready = true;
if ()
{
    Console.WriteLine("go");
}
bool ready = true;
if (ready)              // if 的括號裡需要一個 bool 表示式
{
    Console.WriteLine("go");
}

形態四:兩個運算子連在一起

int a = 5;
int b = a * * 3;   // 兩個運算子中間必須是值
int a = 5;
int b = a * 3;   // 一個運算子,兩邊各一個值
Console.WriteLine(b);

形態五:未閉合括號的級聯

如果報錯的那一行看著毫無問題,往上看一行——一個沒閉合的 ( 或 [ 會讓編譯器繼續讀進你的下一行,然後在意想不到的地方翻車。真正的修法往往在前面一個字元。

常見問答

CS1525 是什麼意思?

編譯器需要一個值卻遇到了標點或什麼都沒有。補上缺失的表示式、去掉多餘的運算子、把引數寫完整。

會不會是級聯錯誤?

會——上一行未閉合的括號會把錯誤推到下面。先看報錯位置前一個 token。

排查清單