編譯錯誤 · 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。
排查清單
- 讀錯誤裡"found"的部分——通常是
;、)或多餘的運算子。 - 每個
=右邊要有值;每個二元運算子兩邊都要有運算元。 if/while/for的括號裡要有真正的條件。- 兩個運算子之間必須有值。
- 看著沒問題?往上一行找未閉合的括號。