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

HuecoRotoArreglado
tras newnew 5()new Dog()
declaración5 count = 0;int count = 0;
argumento genériconew List<>()new List<int>()
parámetrovoid 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.

ErrorSignificado
CS1031No hay ningún token de tipo en el hueco
CS0246Hay 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