編譯錯誤 · 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 是未知的型別——類、介面、名稱空間名。報錯物件不同,排查方向也不同。

一分鐘排查流程