編譯錯誤 · error CS0117

"X"未包含"Y"的定義

類沒問題——成員名有問題。這是 CS1061 的"型別級"孿生:你走的是類名,而不是物件。

親眼看它發生

Console.WritLine("hello");   // 'WritLine' 少一個 t —— WriteLine

訊息裡寫明瞭它搜尋的類(Console),所以你知道型別解析成功了。剩下唯一的問題就是點號後面那個拼寫。

人人都犯的拼寫錯

你寫的C# 要的說明
Console.WritLineConsole.WriteLine少了個 e
Console.writelineConsole.WriteLine要大駝峰
Math.SqrMath.Sqrt少了個 t
Math.PiMath.PI全大寫

成因一:拼寫錯(幾乎總是)

Console.WriteLine(Math.Sqr(16));
Console.WriteLine(Math.Sqrt(16));   // 正確的名字

成因二:成員存在,但不是靜態的

如果成員是例項成員,你不能通過類名訪問它——你需要一個物件:

class Counter
{
    public int Value = 0;              // 例項欄位

    public static int Total = 0;       // 靜態欄位
}

Counter.Total = 5;      // ✓ 靜態:通過類訪問
// Counter.Value = 5;   // ✗ 沒有靜態的 Value
var c = new Counter();
c.Value = 5;            // ✓ 例項:通過物件訪問

成因三:類搞錯了

有時候方法確實存在,只是住在另一個型別上。Length 屬於字串和陣列;Count 屬於 List。而 Console.Length 哪裡都沒有:

int.Prase("5");              // int 有 Parse —— 不是 Prase
string.Jion(",", new string[0]);   // string 有 Join —— 不是 Jion
Console.WriteLine(int.Parse("5"));            // 正確的名字
string[] parts = { "a", "b" };
Console.WriteLine(string.Join("-", parts));   // Join 也能用

CS0117 與 CS1061,各一行

錯誤碼你寫的含義
CS0117Type.Member該型別上沒有這個成員
CS1061obj.Member該物件的型別上沒有這個成員

修法一樣——先查拼寫,再查型別對不對。

常見問答

CS0117 是什麼意思?

型別存在但沒有那個成員——通常是靜態成員拼錯,如 Console.WritLine 或 Math.Sqr。

和 CS1061 的區別?

CS0117 走型別名(Type.Member);CS1061 走例項(obj.Member)。成因和修法一樣。

排查清單