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<Curso>.

¿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.