编译错误 · 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/−1;第一次跌破负数的位置就是多余的括号。
- 删掉后跑自动格式化——如果布局忽然对上了,你找对了。
这套在 Visual Studio、VS Code、Rider 里都管用。这里的引擎报的是和真实编译器同一个错误码,所以你可以直接在上面练。
常见问答
CS1022 是什么意思?
右花括号比左花括号多一个。从上往下数 +1/−1,计数变负的地方就是要删的括号。
CS1022 和 CS1513 的区别?
CS1022 是右括号太多;CS1513 是右括号太少。同样的计数法,方向相反。
排查清单
- 从文件开头数
{(+1)和}(−1)。 - 第一个变负的点 = 多余的括号。
- 粘贴过代码?检查粘贴区域的结尾。
- 删过块?检查它的括号是否留下来了。
- 修完跑自动格式化,确认结构没问题。