编译错误 · error CS1031
应输入类型
语法里有槽位只收类型名——int、string、List<int>、Dog。它拿到了值。这是 CS1001 的"类型形态"版本。
亲眼看它发生
var item = new 5(); // new 后面要类型,5 是值
哪些地方必须写类型
| 槽位 | 错的 | 对的 |
|---|---|---|
new 之后 | new 5() | new Dog() |
| 声明 | 5 count = 0; | int count = 0; |
| 泛型实参 | new List<>() | new List<int>() |
| 参数 | void F(5) | void F(int n) |
成因一:类型的位置放了值
var price = new 9.99(); // 你大概想写某个类
double price = 9.99; // 值本来就在手上——不需要 new
Console.WriteLine(price);
这是最常见的一种:new 是用来创建对象的。double 是个值,直接写就行。
成因二:泛型的实参列表是空的
var items = new List<>();
var items = new List<string>();
Console.WriteLine(items.Count);
成因三:参数没有类型
void Show(5) // 参数需要类型和名字——这里放了个值
{
}
void Show(int value) // 先类型,再名字
{
Console.WriteLine(value);
}
Show(0);
成因四:拼错让类型消失了
如果你本来想写类型,错误却说"应输入类型",先看那个名字是不是变成了标点——一个不小心多出的 .,或者一个被删掉的词。然后再单独检查这个类型是否存在:那是 CS0246。
| 错误 | 含义 |
|---|---|
| CS1031 | 槽位里根本没有类型 token |
| CS0246 | 类型名写了,但不认识(拼错 / 缺 using) |
常见问答
CS1031 是什么意思?
编译器需要类型名却找到了值或什么都没有。在报错位置填上真正的类型——new 之后、声明里、或泛型的尖括号内。
CS1031 和 CS0246 的区别?
CS1031:形状错了——该有类型的地方没有。CS0246:形状对了但类型不认识。先修形状,再修拼写。
排查清单
- 看报错指向的槽位:
new、声明、泛型、还是参数。 - 类型的地方放了值?换成类型。
- 尖括号空的?把类型实参填进去。
- 声明既没类型也没
var?补一个。 - 类型名看着没错却还报错?那是 CS0246——查拼写和 using。