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.

È stato utile?

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
scroll top