Trabajar con colecciones genéricas en C# ofrece flexibilidad, tipado fuerte y un flujo de trabajo moderno. Aquí verás cómo migrar de arreglos a List<T>, agregar y quitar elementos con métodos clave, y depurar en Visual Studio Code con confianza. Todo con ejemplos claros y directos.
¿Por qué usar colecciones genéricas en C#?
Las colecciones genéricas permiten definir el tipo de dato que almacenan desde el inicio. Eso evita errores y mejora el rendimiento. Con List<T> puedes agregar, quitar y combinar elementos, algo que con un arreglo fijo no es posible.
- Arreglo vs lista: un arreglo tiene tamaño fijo. Una lista crece y reduce dinámicamente.
- Genéricos:
List<Curso> asegura que solo se guarden objetos Curso.
- Espacio de nombres: se requiere
using System.Collections.Generic; para acceder a List, Dictionary, HashSet, etc.
- Otros tipos útiles: cola (
Queue), pila (Stack), Dictionary y HashSet. También hay colecciones especializadas en System.Collections.Specialized y para concurrencia en System.Collections.Concurrent.
- Compatibilidad con
foreach: recorrer una lista o un arreglo con foreach es equivalente.
IEnumerable clave: una lista es un IEnumerable<Curso>. Casi cualquier colección es enumerable, lo que habilita métodos como agregar rangos.
¿Cómo migrar de arreglos a list en System.Collections.Generic?
Migrar es directo: declaras una List<Curso>, cambias la propiedad de Escuela a lista genérica y reasignas la referencia.
- Inicializar una lista tipada.
using System.Collections.Generic;
var listaCursos = new List<Curso>
{
new Curso { Nombre = "101" },
new Curso { Nombre = "201" },
new Curso { Nombre = "301" }
};
- Actualizar la entidad para usar lista genérica.
public class Escuela
{
public List<Curso> Cursos { get; set; }
}
- Asignar la lista a la escuela.
escuela.Cursos = listaCursos;
- El
foreach se mantiene igual.
foreach (var curso in escuela.Cursos)
{
// Imprimir o procesar cada curso.
}
¿Cómo inicializar y asignar a escuela.cursos?
- Declara
List<Curso> y especifica el tipo Curso entre < >.
- Importa el namespace
System.Collections.Generic.
- Asigna la nueva lista a
escuela.Cursos.
- Mantén el recorrido con
foreach sin cambios.
¿Cómo agregar elementos: add y addrange?
Puedes sumar cursos de forma incremental o en bloque.
- Agregar uno a uno con
Add.
escuela.Cursos.Add(new Curso {
Nombre = "102",
Jornada = TiposJornada.Tarde
});
escuela.Cursos.Add(new Curso {
Nombre = "202",
Jornada = TiposJornada.Tarde
});
- Agregar en bloque con
AddRange usando otra colección enumerable.
var otraColeccion = new List<Curso>
{
new Curso { Nombre = "401", Jornada = TiposJornada.Mañana },
new Curso { Nombre = "501", Jornada = TiposJornada.Mañana },
new Curso { Nombre = "502", Jornada = TiposJornada.Tarde }
};
escuela.Cursos.AddRange(otraColeccion);
Notas prácticas.
- El unique ID del curso es de solo lectura: se asigna internamente.
- Puedes estandarizar reglas simples, por ejemplo: nombres que terminan en "2" con jornada tarde.
¿Cómo eliminar elementos: clear y remove?
La lista también permite limpiar o quitar elementos específicos.
- Vaciar una colección completa con
Clear.
otraColeccion.Clear(); // Remueve todos los elementos.
- Quitar un curso concreto con
Remove.
// Suponiendo que tienes la referencia al objeto curso a eliminar.
escuela.Cursos.Remove(cursoAEliminar);
- Remover según condición: existe una opción para "remover todos los que cumplan una condición" sobre la colección de cursos.
¿Cómo depurar y observar colecciones en Visual Studio Code?
Depurar ayuda a verificar contenidos en cada paso. El flujo en VS Code es cómodo y visual.
- Ejecuta en consola con
dotnet run para validar rápidamente.
- Coloca un punto de interrupción y presiona play en el panel de debug.
- Observa variables locales en el panel superior.
- Usa la ventana watch para inspeccionar
otraColeccion y sus elementos.
- Avanza paso a paso: pausa, siguiente, adentro, afuera, reiniciar o detener.
- Verifica cambios tras
Clear: el contador pasa de tres a cero, sin errores.
¿Listo para profundizar en las condiciones de remoción selectiva y más operaciones sobre colecciones? Comparte tus dudas o casos de uso en los comentarios.