编译错误 · error CS1022

应输入类型、命名空间定义或文件结尾

这句编译器黑话的直译是:你多了一个右花括号。有个 } 已经没有任何块可以闭合了。

亲眼看它发生

int x = 5;
Console.WriteLine(x);
}   // ← 前面没有开过任何块,这个括号无处闭合

它是 CS1513 的镜像

错误含义修法
CS1513 — 应输入 }右花括号太少补上缺失的 }
CS1022右花括号太多删掉多余的 }

诊断方法完全相同,方向相反。从文件开头数:{ 加一,} 减一。如果计数变成负数,你刚刚越过了那个多余的括号。

常见成因

1. 复制粘贴多带了一个括号

class Greeter
{
    public void Hello()
    {
        Console.WriteLine("hi");
    }
}   // 闭合 class
}   // ← 不小心粘了两遍

2. 删了块,括号留下了

你删掉一个 if 或方法,却留下了它的右花括号。症状常常是一串迷惑性的级联错误:它后面的所有东西看起来都跑到类外面去了。

3. 重新格式化时括号合并了

自动格式化修不好括号数量——它只能对齐已有的东西。如果两个块被合并,先靠肉眼对齐缩进,找那一行缩进和邻居不符的。

20 秒修好它

  1. 点文件里的第一个 {;大多数编辑器会高亮它的配对。
  2. 如果某个 } 什么都高亮不出来,它就是没有开头的孤儿——删掉。
  3. 或者从上往下数 +1/−1;第一次跌破负数的位置就是多余的括号。
  4. 删掉后跑自动格式化——如果布局忽然对上了,你找对了。

这套在 Visual Studio、VS Code、Rider 里都管用。这里的引擎报的是和真实编译器同一个错误码,所以你可以直接在上面练。

常见问答

CS1022 是什么意思?

右花括号比左花括号多一个。从上往下数 +1/−1,计数变负的地方就是要删的括号。

CS1022 和 CS1513 的区别?

CS1022 是右括号太多;CS1513 是右括号太少。同样的计数法,方向相反。

排查清单