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:
| Escribiste | C# quería |
|---|---|
s.Lenth | s.Length |
s.toUpper() | s.ToUpper() — PascalCase |
list.count | list.Count |
arr.Size | arr.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
- Lee el mensaje: nombra el tipo donde buscó — la variable está bien, el miembro no.
- Revisa mayúsculas: los miembros de C# son PascalCase (
ToUpper,Count,Length). - ¿Propiedad o método?
Count/Lengthsin(). - ¿Existe en otro sitio? Puede que tengas el tipo equivocado — arrays tienen
Length,ListtieneCountyAdd. - En Visual Studio, escribir el punto lista los miembros REALES — confía en IntelliSense, no en la memoria.