c# linq foreach code-review cyclomatic-complexity

c# - Cómo reducir múltiples bloques foreach anidados



linq code-review (2)

Cuando no hay nada entre los dos bucles, antes o después del anidado, puede usar SelectMany para "aplanar" dos bucles en uno:

foreach (var relatedObject in Ids.SelectMany(object1.GetRelatedObjects)) { ... }

Una diferencia importante entre este bucle y el bucle que tiene es que el id ya no está dentro del alcance. Suponiendo que relatedObject expone una propiedad de Id pública, esto no debería ser un problema en su situación, ya que podría extraer la id con

var id = relatedObject.Id;

Tengo el siguiente escenario:

var Ids = object1.GetIds(); // returns IEnumerable<int> foreach (var id in Ids) { foreach (var relatedObject in object1.GetRelatedObjects(id)) { // Do Something with related object } }

En este caso, quiero deshacerme del primer foreach y reducir esta lógica en foreach único. ¿Cómo podría lograr esto?

¿Debería ser posible con la expresión LINQ alguna metodología similar?


Personalmente, me gusta aprovechar al máximo las llaves / bloque opcionales para los bucles foreach .

No puedes reducir la complejidad. Pero puedes hacer que se vea mejor

IEnumerable<int> Ids = object1.GetIds() foreach (var id in Ids) foreach (var relatedObject in object1.GetRelatedObjects(id)) { DoSomething(relatedObject); }