Riscrivere questo rendimento foreach a un rendimento linq?
-
22-07-2019 - |
Domanda
Supponiamo che io abbia il seguente codice (contesto ristretto per limitare l'ambito della domanda)
public static IEnumerable<Color> GetThemColors(){
var ids = GetThePrimaryIds();
foreach (int id in ids){
yield return GetColorById(id);
}
ids = GetTheOtherIds();
foreach (int id in ids){
yield return GetOtherColorsById(id);
}
}
Vorrei riscriverli in qualcosa del genere (che ovviamente non viene compilato
public static IEnumerable<Color> GetThemColors(){
GetThePrimaryIds().Select(id=>yield return GetColorById(id));
GetTheOtherIds().Select(id=>yield return GetOtherColorsById(id));
}
Il punto chiave è che nel mio primo frammento ho due foreach enumeratori che non riesco a fare in linq senza perdere le mie funzionalità di caricamento lento.
Soluzione
Desideri Concat
:
return GetThePrimaryIds().Select(id => GetColorById(id)).Concat(
GetTheOtherIds().Select(id => GetOtherColorsById(id)));
Si noti inoltre che non è necessario rendimento>
in lambdas.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow