编译错误 · 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。

排查清单