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);
}