Uso de Colecciones en C#: Listas y Operaciones Básicas

Clase 22 de 32Fundamentos de C# con NET Core 2.1

Resumen

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.