Error del compilador · error CS1031
Se esperaba un tipo
Hay huecos de la gramática que solo aceptan un nombre de tipo — int, string, List<int>, Dog. Recibió un valor. Es la versión "con forma de tipo" de CS1001.
Míralo ocurrir
var item = new 5(); // 'new' necesita un tipo, y 5 es un valor
Dónde se exige un tipo
| Hueco | Roto | Arreglado |
|---|---|---|
tras new | new 5() | new Dog() |
| declaración | 5 count = 0; | int count = 0; |
| argumento genérico | new List<>() | new List<int>() |
| parámetro | void F(5) | void F(int n) |
Causa 1: un valor donde va un tipo
var precio = new 9.99(); // probablemente querías una clase
double precio = 9.99; // el valor ya lo tenías — no hace falta new
Console.WriteLine(precio);
Es la versión más común: new sirve para crear objetos. Un double es un valor que se escribe tal cual.
Causa 2: una lista de argumentos genéricos vacía
var items = new List<>();
var items = new List<string>();
Console.WriteLine(items.Count);
Causa 3: un parámetro sin tipo
void Mostrar(5) // un parámetro necesita tipo Y nombre — esto es un valor
{
}
void Mostrar(int valor) // tipo, luego nombre
{
Console.WriteLine(valor);
}
Mostrar(0);
Causa 4: una errata hizo desaparecer el tipo
Si querías un tipo y el error dice "se esperaba un tipo", mira si el nombre se convirtió en puntuación — un . accidental o una palabra borrada. Después comprueba aparte si el tipo existe: eso es CS0246.
| Error | Significado |
|---|---|
| CS1031 | No hay ningún token de tipo en el hueco |
| CS0246 | Hay un nombre de tipo, pero es desconocido (errata / falta using) |
Preguntas frecuentes
¿Qué significa CS1031?
El compilador esperaba un nombre de tipo y encontró un valor o nada. Pon un tipo real en el hueco señalado: tras new, en una declaración o dentro de los ángulos de un genérico.
¿CS1031 vs CS0246?
CS1031: forma incorrecta — no hay tipo donde se exige. CS0246: forma correcta pero tipo desconocido.
Lista de comprobación
- Mira el hueco que señala el error:
new, declaración, genérico o parámetro. - ¿Hay un valor donde va un tipo? Cámbialo por el tipo.
- ¿Ángulos vacíos? Rellena el argumento de tipo.
- ¿Declaración sin tipo ni
var? Añade uno. - ¿El nombre del tipo parece correcto y aun así falla? Es CS0246 — revisa ortografía y usings.