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.