Error del compilador · error CS1061

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

Le pediste a un valor un miembro — método, propiedad, campo — que su tipo no tiene. A diferencia de CS0103 (la variable es desconocida), aquí la variable está bien; lo que falla es la parte después del punto.

Míralo ocurrir

string s = "hola";
Console.WriteLine(s.Lenth);   // 'string' tiene Length — no Lenth
string s = "hola";
Console.WriteLine(s.Length);  // L mayúscula, ortografía exacta

Causa 1: errata o mayúsculas (lo habitual)

El mensaje nombra el tipo exacto donde buscó — léelo. 'string' no contiene una definición para 'Lenth' significa que el compilador SÍ sabe que s es un string y revisó todo lo que un string puede hacer. La errata es el único problema:

EscribisteC# quería
s.Lenths.Length
s.toUpper()s.ToUpper() — PascalCase
list.countlist.Count
arr.Sizearr.Length — arrays usan Length, no Size

Causa 2: llamar a tu propio miembro con errata

class Perro
{
    public string Nombre;

    public void Ladrar()
    {
        Console.WriteLine(Nombre + " dice guau");
    }
}

Perro d = new Perro { Nombre = "Rex" };
d.Ladrarr();   // una r de más
class Perro
{
    public string Nombre;

    public void Ladrar()
    {
        Console.WriteLine(Nombre + " dice guau");
    }
}

Perro d = new Perro { Nombre = "Rex" };
d.Ladrar();

Causa 3: el miembro existe — en otro tipo

Llamaste al método sobre el objeto equivocado. Clásico: llamar a un método de List sobre un array (se parecen, no son lo mismo):

int[] arr = { 1, 2, 3 };
arr.Add(4);        // error CS1061: los arrays son de tamaño fijo — no hay Add
                   // ¿quieres añadir? usa List<int>:

var lista = new List<int> { 1, 2, 3 };
lista.Add(4);      // ✓ perfecto

Causa 4: llamar como método algo que no lo es

Las propiedades se leen como campos, no se llaman como métodos. Añadir () a una propiedad dispara este error (Visual Studio diría CS1955 — "miembro no invocable usado como método"):

var lista = new List();
lista.Add(1);
Console.WriteLine(lista.Count());   // Count es propiedad — sin ()
var lista = new List();
lista.Add(1);
Console.WriteLine(lista.Count);    // propiedad: sin paréntesis

Regla práctica: lo que HACE algo es método (()); lo que ES algo es propiedad (sin ()). list.Add(x) actúa; list.Count simplemente es.

Preguntas frecuentes

¿Qué significa CS1061 en C#?

El miembro después del punto no existe en ese tipo. Errata, mayúsculas, propiedad llamada como método, o método de List sobre un array.

¿Count lleva paréntesis?

List<T>.Count es propiedad, sin paréntesis; arrays usan .Length, también sin paréntesis. Los métodos sí llevan: list.Add(x), s.ToUpper().

Lista de comprobación