Error del compilador · error CS1001
Se esperaba un identificador
La gramática tiene un hueco que solo admite un nombre, y recibió otra cosa. El mensaje no siempre dice qué nombre — la habilidad está en reconocer los huecos.
Míralo ocurrir
int 5 = x; // el nombre de una variable no puede ser un número
Los cinco huecos de nombre que verás
| Construcción | Necesita | Roto | Arreglado |
|---|---|---|---|
| declaración de variable | variable | int = 5; | int x = 5; |
| declaración de clase | clase | class { } | class Foo { } |
| declaración de método | método | void () { } | void Run() { } |
| parámetro | parámetro | void F(int) { } | void F(int n) { } |
expresión new | tipo | var d = new (); | var d = new Dog(); |
Causa 1: el nombre fue borrado
string = "hola"; // ¿qué variable debería guardar esto?
string saludo = "hola";
Console.WriteLine(saludo);
Causa 2: una palabra clave usada como nombre
int class = 5; // 'class' ya significa algo para el compilador
Dos soluciones — renombrar (mejor), o escaparla con @ (legal pero feo):
int @class = 5; // la @ dice "trata esto como un nombre normal"
Console.WriteLine(@class);
Causa 3: falta el nombre del parámetro
void Saludar(string)
{
Console.WriteLine("hola");
}
void Saludar(string nombre)
{
Console.WriteLine("hola, " + nombre);
}
Saludar("Ada");
Causa 4: un genérico con el argumento de tipo vacío
var lista = new List<>(); // ¿qué tipo de List?
var lista = new List<int>();
Console.WriteLine(lista.Count);
Preguntas frecuentes
¿Qué significa CS1001?
El compilador esperaba un nombre y encontró un número, operador o palabra clave mal ubicada. Pon un identificador válido en la posición señalada.
¿Puedo usar una palabra clave como nombre?
Con @, sí (@class) — pero renombrar es casi siempre mejor.
Lista de comprobación
- Localiza el hueco: declaración, clase, método, parámetro o
new. - ¿Falta el nombre por completo? Añádelo.
- ¿Es una palabra clave? Renombra, o escapa con
@. - ¿Falta el tipo genérico?
new List<int>(), nonew List<>().