Aprende a depurar en C# con autoridad: corrige referencias nulas, genera datos de prueba consistentes con LINQ y asigna alumnos por curso de forma aleatoria con Random. Aquí verás cómo evitar errores comunes, nombrar mejor tus métodos y convertir resultados a listas para trabajar sin fricción.
¿Cómo detectar y corregir referencias nulas en C# durante el debug?
En Visual Studio Code, un punto de interrupción reveló una excepción por referencia nula al asignar asignaturas al curso. La causa: la lista de asignaturas del curso no estaba inicializada. La solución: inicializar la colección o asignar la lista creada antes de usarla.
- Usa el debug para inspeccionar variables en tiempo de ejecución.
- Identifica objetos nulos antes de agregarles elementos.
- Inicializa listas en las entidades para garantizar estados válidos.
Ejemplo de inicialización segura en la entidad Curso:
public class Curso
{
public List<Asignatura> Asignaturas { get; set; } = new List<Asignatura>();
}
O asignación directa de una lista ya creada:
curso.Asignaturas = listaDeAsignaturas;
Tip de diseño: renombrar métodos para reflejar su intención ayuda a mantener el código claro. Si un método no “carga” sino que “crea” alumnos, cámbiale el nombre.
// Antes
List<Alumno> CargarAlumnos(int cantidad) { /* ... */ }
// Después
List<Alumno> GenerarAlumnosAlAzar(int cantidad) { /* ... */ }
¿Cómo generar alumnos con LINQ, unique ID y listas en C#?
Se creó un producto cartesiano con LINQ para combinar fragmentos de nombres y apellidos. Resultado destacado: 391 alumnos generados al instante, cada uno con identificador único usando Guid.
- Usa OrderBy con una clave estable para variar resultados cuando apliques Take.
- Devuelve List en lugar de IEnumerable si tu dominio trabaja con listas.
- Emplea Guid para UniqueId al instanciar cada alumno.
Ejemplo de ordenamiento, truncado y conversión a lista:
List<Alumno> GenerarAlumnosAlAzar(int cantidad)
{
var alumnos = listaAlumnos
.OrderBy(a => a.UniqueId) // orden aleatorio efectivo si UniqueId se crea al instanciar
.Take(cantidad)
.ToList(); // trabajar con List
return alumnos;
}
Definición de identificador único con Guid:
public class Alumno
{
public string UniqueId { get; } = Guid.NewGuid().ToString();
public string Nombre { get; set; }
}
Insight práctico: si solo haces Take(cantidad) sobre la misma fuente, los mismos N alumnos se repetirán en todos los cursos. El ordenamiento por UniqueId cambia el orden y evita duplicidades entre cursos.
¿Cómo asignar alumnos aleatorios por curso con Random en .NET?
Para evitar cursos con 300+ alumnos y simular escenarios reales, se limitó y varió la cantidad por curso con Random. Observación reveladora: ubicar la cantidad fuera del bucle generó el mismo número (p. ej., 12) en varios cursos; mover el cálculo dentro del foreach solucionó el patrón repetido y produjo valores como 10, 11, 12, 13 en distintas iteraciones.
- Genera tamaños de curso con Random.Next en un rango razonable (por ejemplo, 5 a 20).
- Calcula la cantidad dentro del foreach para obtener valores distintos por curso.
- Asigna a cada curso una lista nueva de alumnos generada al azar.
Implementación típica:
var rnd = new Random();
foreach (var c in escuela.Cursos)
{
int cantidad = rnd.Next(5, 20); // entre 5 y 20
c.Alumnos = GenerarAlumnosAlAzar(cantidad); // alumnos únicos por ordenamiento
}
¿Qué habilidades refuerzas con este flujo?
- Depuración con puntos de interrupción y panel de variables.
- Manejo de referencias nulas e inicialización de colecciones.
- Uso de LINQ: OrderBy, Take y colecciones proyectadas.
- Conversión de IEnumerable a List con ToList para operar en dominio.
- Generación de datos de prueba: producto cartesiano y Random.
- Identificadores únicos con Guid.
- Buenas prácticas de nombres y refactoring para mover responsabilidades a nuevas clases (como una clase estática Printer para títulos y pitidos).
- Revisión de tipos numéricos: double, decimal, float.
¿Qué keywords y datos relevantes conviene recordar?
- Visual Studio Code, debug, punto de interrupción, referencia nula.
- Curso, Asignatura, Alumno, Evaluación, Escuela.
- LINQ, OrderBy, Take, IEnumerable, ToList, Guid, Random.
- Producto cartesiano para generar 391 alumnos.
- Rango de alumnos por curso con Random: entre 5 y 20.
- Próximo paso: carga de evaluaciones.
¿Tú cómo limitarías los alumnos por curso y qué criterio de orden usarías para variar resultados? Comparte tu enfoque y decisiones de diseño en los comentarios.