編譯錯誤 · 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。