编译错误 · 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:形状对了但类型不认识。先修形状,再修拼写。

排查清单