Simplifica colecciones con lambda y delegados

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

Resumen

Aprende a escribir código más claro y compacto en C# al trabajar con colecciones: de predicados tradicionales a delegados y expresiones lambda, con ejemplos prácticos de borrado con RemoveAll y buenas prácticas de comentarios en Visual Studio Code. Confianza y eficiencia en un solo lugar.

¿Cómo simplificar el borrado en colecciones con predicados y RemoveAll?

Trabajar con colecciones genéricas requiere decisiones claras para agregar y remover elementos. Aquí se muestra cómo pasar de un predicado explícito a formas más limpias y mantenibles.

  • Predicado como método: un método que recibe un Curso y devuelve bool.
// Basado en un método predicado
bool EsNombre301(Curso curso) => curso.Nombre == "301";

cursos.RemoveAll(EsNombre301); // Elimina todos con Nombre == "301".
  • Inferencia de tipos: desde C# 3.5 el compilador infiere el tipo del predicado al pasarlo como argumento, evitando “mappings” innecesarios.

  • Remoción múltiple: RemoveAll recorre la colección; elimina los que devuelven true y deja los que devuelven false.

¿Cómo reescribir con delegate para mayor claridad?

Cuando el predicado es corto, puedes definir el delegado en línea. Es legible y explícito.

// Delegado anónimo dentro de RemoveAll
cursos.RemoveAll(delegate (Curso cur)
{
    return cur.Nombre == "301";
});
  • Ventaja: encapsulas la lógica sin declarar un método aparte.
  • Consideración: en el delegado anónimo especifica el tipo del parámetro.

¿Cómo compactar con una expresión lambda?

La forma más concisa para condiciones simples: menos código, misma intención.

// Lambda expression, tipo inferido por la lista genérica
cursos.RemoveAll(cur => cur.Nombre == "301");
  • Lectura directa: para cada cur, evalúa la condición y elimina si es true.
  • Sin tipo explícito: el compilador infiere Curso desde List.

¿Cómo aplicar condiciones compuestas?

Cuando hay duplicados o múltiples criterios, combina condiciones lógicas.

// Eliminar todos los "501"
cursos.RemoveAll(cur => cur.Nombre == "501");

// Eliminar solo "501" en jornada mañana
cursos.RemoveAll(cur => cur.Nombre == "501" &&
                   cur.Jornada == TipoJornada.JornadaManana);
  • Bool en acción: el tipo bool es clave para filtrar en colecciones.
  • Criterios flexibles: combina campos como Nombre y Jornada.

¿Qué formas de comentarios usar en C# según el contexto?

Comentar bien acelera el mantenimiento y la colaboración. Usa el estilo adecuado para cada necesidad.

¿Cuándo usar comentarios de una línea y multilínea?

  • Una línea con doble slash para notas breves.
// Esto elimina cursos con Nombre == "301".
  • Multilínea para bloques más extensos.
/*
 Bloque de comentarios.
 Útil para desactivar secciones de código temporalmente.
*/
  • Atajos en Visual Studio Code:
  • Ctrl + K, C: poner comentarios.
  • Ctrl + K, U: quitar comentarios.

¿Cómo documentar métodos con comentarios XML?

Para documentación formal y autogenerada, usa triple slash.

/// <summary>
/// Imprime la lista de cursos en consola.
/// </summary>
/// <param name="cursos">colección a imprimir.</param>
void ImprimirCursos(List<Curso> cursos) { /* ... */ }
  • Ideal para proyectos profesionales.
  • Compatible con herramientas del ecosistema .NET.

¿Qué habilidades y conceptos clave refuerzas al practicar esto?

Al aplicar estas técnicas, mejoras tu dominio de colecciones y del modelo de delegados en C#.

  • Colecciones vs. arreglos: colecciones ofrecen operaciones de alto nivel como RemoveAll.
  • Predicado: método que recibe un tipo (Curso) y devuelve bool para decidir eliminación.
  • Delegado: función pasada como parámetro; puede ser método, delegado anónimo o lambda.
  • Expresión lambda: sintaxis compacta para delegados con inferencia de tipos.
  • Inferencia de tipos: el compilador deduce tipos desde el contexto genérico.
  • Bool: base de filtros y decisiones en recorridos.
  • Comentarios: //, / / y /// para control, desactivación de bloques y documentación.
  • Productividad en editor: atajos de Visual Studio Code para comentar y descomentar.

¿Te gustaría ver variantes con condiciones más complejas o con otros campos del modelo? Comparte tus dudas y casos en los comentarios.