Error del compilador · error CS0117

'X' no contiene una definición para 'Y'

La clase está bien — el nombre del miembro no. Es el gemelo "a nivel de tipo" de CS1061: accediste a través del nombre de la clase en lugar de un objeto.

Míralo ocurrir

Console.WritLine("hola");   // a 'WritLine' le falta la e — WriteLine

El mensaje nombra la clase que buscó (Console), así que sabes que el tipo se resolvió. Solo queda la ortografía después del punto.

Las erratas que todos cometemos

EscribisteC# quiereNota
Console.WritLineConsole.WriteLinefalta la e
Console.writelineConsole.WriteLinePascalCase
Math.SqrMath.Sqrtfalta la t
Math.PiMath.PItodo en mayúsculas

Causa 1: una errata (casi siempre)

Console.WriteLine(Math.Sqr(16));
Console.WriteLine(Math.Sqrt(16));   // nombre correcto

Causa 2: el miembro existe pero no es estático

Si el miembro es de instancia, no puedes alcanzarlo por el nombre de la clase — necesitas un objeto:

class Counter
{
    public int Value = 0;              // campo de instancia

    public static int Total = 0;       // campo estático
}

Counter.Total = 5;      // ✓ estático: por la clase
// Counter.Value = 5;   // ✗ no existe un Value estático
var c = new Counter();
c.Value = 5;            // ✓ instancia: por el objeto

Causa 3: clase equivocada

A veces el método es real, pero vive en otro tipo. Length pertenece a strings y arrays; Count a las listas. Console.Length no existe en ninguna parte:

int.Prase("5");                    // int tiene Parse — no Prase
string.Jion(",", new string[0]);   // string tiene Join — no Jion
Console.WriteLine(int.Parse("5"));            // nombre correcto
string[] parts = { "a", "b" };
Console.WriteLine(string.Join("-", parts));   // y Join funciona

CS0117 y CS1061, una línea cada uno

CódigoEscribisteSignificado
CS0117Type.MemberNo existe ese miembro en ese tipo
CS1061obj.MemberNo existe ese miembro en el tipo de ese objeto

Misma solución — revisa la ortografía y luego si estás en el tipo correcto.

Preguntas frecuentes

¿Qué significa CS0117?

El tipo existe pero no tiene ese miembro — normalmente una errata en un miembro estático como Console.WritLine o Math.Sqr.

¿Diferencia con CS1061?

CS0117 va por el nombre del tipo (Type.Member); CS1061 por una instancia (obj.Member). Misma causa, misma solución.

Lista de comprobación