編譯錯誤 · 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:形狀對了但型別不認識。先修形狀,再修拼寫。

排查清單