編譯錯誤 · error CS0103
當前上下文中不存在名稱"X"
你用了一個名字——變數、方法或類——而編譯器從你使用的位置看不到它。三種成因覆蓋幾乎全部場景:拼寫錯、作用域不對、或者壓根沒宣告。
成因一:拼寫錯(最常見)
變數叫 score,你寫成了 scroe。C# 區分大小寫,Score ≠ score:
int score = 100;
Console.WriteLine(scroe); // 拼寫錯:宣告的是 score,用的是 scroe
int score = 100;
Console.WriteLine(score); // 完全一致——連大小寫一起
成因二:在它存在之前就用了
變數從宣告的那一行往下才存在。在宣告上一行用它就會失敗:
Console.WriteLine(total); // total 宣告在這一行的*下面*
int total = 42;
int total = 42; // 先宣告……
Console.WriteLine(total); // ……後使用
成因三:出了作用域——花括號陷阱
宣告在某個塊 { … } 裡面的變數,在閉花括號處就死了。這是從 Python 或 JavaScript 過來的人最容易栽的地方:
for (int i = 0; i < 3; i++)
{
int doubled = i * 2;
}
Console.WriteLine(doubled); // doubled 只活在迴圈體裡
修法:把宣告挪到你需要的那一層:
int last = 0;
for (int i = 0; i < 3; i++)
{
last = i * 2; // 在裡面賦值……
}
Console.WriteLine(last); // ……在外面讀(最後一次是 2*2)
成因四:類里根本沒有這個成員
呼叫了不存在的方法——或者呼叫了方法卻忘了括號——報的是同一套碼:
PrintReport(); // 哪裡都沒有這個方法
void PrintReport()
{
Console.WriteLine("Report: all good");
}
PrintReport(); // 現在這個名字存在了
常見問答
怎麼快速修 CS0103?
點進報錯的行號,把拼寫正反各讀一遍。搜整個檔案找宣告:找不到,就是拼寫錯或者壓根沒宣告;找到了,檢查宣告和你使用位置之間的花括號——中間每一對 { } 是否都在使用前閉合了。再查大小寫:name、Name、NAME 是三個不同的名字。
CS0103 和 CS0246 有什麼區別?
CS0103 是未知的變數(或當前作用域裡的方法);CS0246 是未知的型別——類、介面、名稱空間名。報錯物件不同,排查方向也不同。
一分鐘排查流程
- Ctrl+F 搜名字。沒有?拼寫錯或未宣告。
- 有宣告?數宣告到報錯行之間的花括號:每個
{是否都在使用前閉合。 - 大小寫再查一遍。
- 還是不行?把變數改名成一個不會打錯的,讓編譯器報錯幫你定位殘留。