编译错误 · 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)。成因和修法一样。

排查清单