Error del compilador · error CS0246
No se encuentra el tipo o el nombre de espacio 'X'
A diferencia de CS0103 (una variable desconocida), CS0246 trata de tipos — nombres de clase, struct, interfaz o espacio de nombres. El compilador te dice: "no conozco ningún tipo con ese nombre".
Causa 1: errata en el nombre de tu propia clase
Declaraste Studnet… o usas Studnet. En cualquier caso, declaración y uso deben coincidir:
Student s = new Student(); // no existe ninguna clase 'Student'… todavía
class Student
{
public string Name;
public int Id;
}
Student s = new Student { Name = "Ada", Id = 1 };
Console.WriteLine($"Student: {s.Name} (#{s.Id})");
Causa 2: un tipo .NET mal escrito (el clásico: Sting)
Las palabras clave como string e int siempre existen. Pero los nombres de clase .NET — y de cualquier otra clase de la BCL — deben escribirse bien. Sting sin la r es el disparador más famoso:
Sting nombre = "Ada"; // querías 'String'… o mejor: 'string'
string nombre = "Ada"; // alias de palabra clave — siempre disponible
String igual = "Ada"; // nombre de clase .NET — también vale, mismo tipo
Console.WriteLine(nombre == igual ? nombre : "distinto");
Causa 3: falta una directiva using
En Visual Studio este error suele significar que usas una clase de un espacio de nombres que no has importado. El motor del navegador preimporta lo esencial, así que aquí se demuestra el mismo tipo de fallo — un prefijo de espacio de nombres mal escrito:
// "Systm" — un prefijo mal escrito nunca se resuelve:
Systm.Console.WriteLine("hola");
En un proyecto real la solución es una línea al principio del archivo, o Ctrl+. sobre el nombre en rojo:
using System.Text; // ahora StringBuilder se resuelve
using System.Collections.Generic; // ahora List<T> / Dictionary<K,V> se resuelven
Causa 4: el paquete no está referenciado
Algunos tipos viven en paquetes NuGet, no en la biblioteca base. Si using Newtonsoft.Json; sigue dando CS0246, el paquete no está instalado en este proyecto — un using solo puede importar espacios de nombres ya referenciados. Solución: añade el paquete NuGet y el using empieza a funcionar.
Tabla de decisión
| ¿De dónde viene el nombre? | Qué revisar |
|---|---|
| Tu propia clase | Ortografía y mayúsculas entre class X y cada uso; mismo archivo o espacio de nombres |
| Biblioteca base de .NET | Ortografía (String vs Sting); prueba la palabra clave en minúsculas (string) |
| Otro espacio de nombres | Directiva using arriba; Ctrl+. propone añadirla |
| Paquete NuGet | Paquete instalado + referencia del proyecto; recompila tras instalar |
Preguntas frecuentes
¿Qué provoca el error CS0246 en C#?
El compilador encontró un tipo o espacio de nombres que no conoce. Revisa: ortografía de tu clase, ortografía de tipos .NET (String, no Sting), un using que falta, o un paquete NuGet sin referenciar.
¿Diferencia entre CS0246 y CS0103?
CS0246 es sobre TIPOS desconocidos; CS0103 sobre VARIABLES o métodos desconocidos. Si el error señala la parte antes de un punto, suele ser CS0246.
Ritual de depuración en un minuto
- Relee el nombre del error letra por letra — el 90% de los CS0246 es ortografía.
- ¿Es un tipo tuyo? Busca
class <Nombre>en toda la solución. - ¿Es un tipo .NET? Escríbelo otra vez despacio y deja que IntelliSense confirme las mayúsculas.
- ¿Sigue en rojo? Es un problema de paquete o referencia, no de código.