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ónNecesitaRotoArreglado
declaración de variablevariableint = 5;int x = 5;
declaración de claseclaseclass { }class Foo { }
declaración de métodométodovoid () { }void Run() { }
parámetroparámetrovoid F(int) { }void F(int n) { }
expresión newtipovar 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