I have 3 (Modifica) si escludono a vicenda IEnumerables che si desidera ripetere. Voglio fare qualcosa di simile:Foreach su un insieme di IEnumerables
IEnumerable<Car> redCars = GetRedCars();
IEnumerable<Car> greenCars = GetGreenCars();
IEnumerable<Car> blueCars = GetBlueCars();
foreach(Car c in (redCars + greenCars + blueCars)) {
c.DoSomething();
}
...
Il modo migliore che viene in mente è:
...
List<Car> allCars = new List();
allCars.AddRange(redCars);
allCars.AddRange(greenCars);
allCars.AddRange(blueCars);
foreach(car in allCars) {
...
}
...
C'è un modo più conciso per fare questo? Sembra che la combinazione di IEnumberables sia banale.
Heh ... Ho iniziato con Concat e poi sono andato a Union e poi ho deciso che non potevo decidere quale usare, quindi ho cancellato la mia risposta. Mi piace il tuo spiegare la differenza in ogni caso meglio. +1 – Randolpho
Esattamente quello che stavo cercando. Grazie! – sdr
@sdr: nota che c'è un compromesso tempo/spazio qui. Supponiamo che tu non avessi tre ma venti liste del genere ciascuna con diecimila elementi. Il tuo metodo (concatenandoli tutti insieme in un'unica grande lista) occupa circa 20 x 10.000 riferimenti extra e richiede 20 operazioni di copia di riferimento di 10KK. Fare 20 concats ingenui, d'altra parte, prende zero riferimenti extra, ma concat nidificati hanno un onere di copia basato sulla loro profondità di nidificazione, quindi ci saranno 10 x 11 x 10K = 110 K copie, non 20K copie. Vedi http://blogs.msdn.com/wesdyer/archive/2007/03/23/all-about-iterators.aspx per i dettagli. –