2012-06-22 11 views
5

Non sono sicuro che il titolo trasmetta il mio significato, per favore cambialo se è possibile definire meglio questa domanda in una frase.C# Trasmissione del valore Foreach a una delle sue proprietà

Mi piacerebbe eseguire un'iterazione attraverso una raccolta di T, ma invece di lavorare con l'oggetto (T), voglio recuperare (T) object.SomeProperty.

Come posso farlo:

List<Car> _cars; 
FillList(_cars); 

foreach (Car car in _cars) 
{ 
    Windshield ws = car.Windshield; 

    ws.DoWorkA(); 
    ws.DoWorkB(); 
    ws.DoWorkC(); 
} 

Quello che mi piacerebbe fare:

List<Car> _cars; 
FillList(_cars); 

foreach (Car car in _cars using ws as Windshield = car.Windshield) 
{ 
    ws.DoWorkA(); 
    ws.DoWorkB(); 
    ws.DoWorkC(); 
} 

Un modo per diventare un programmatore, anche più pigri?

+0

Il secondo metodo è più lungo il vostro primo. Non sono sicuro di quanto sia pigro. – Paddy

+2

Sì, lo so, e ho pensato di cambiare l'ultima frase per rimuovere pigro, ma ero troppo pigro per farlo. – Michael

risposta

14

È possibile utilizzare LINQ e selezionare:

foreach (Windshield ws in _cars.Select(car => car.Windshield)) 
{ 
    ws.DoWorkA(); 
    ws.DoWorkB(); 
    ws.DoWorkC(); 
} 
+1

In loop la raccolta per creare una nuova raccolta per eseguire il ciclo tramite IMO non è il massimo per le prestazioni ... –

+0

Ho pensato che LINQ si limitasse a elencare senza creare un'intera nuova raccolta (a meno che non si chiami esplicitamente qualcosa come ToList()) –

+1

Ha vinto creare una nuova collezione LINQ utilizza l'esecuzione posticipata. Poiché nel codice non è presente alcun 'ToList' o' ToArray' nel codice, verrà eseguito "one" foreach e verrà generato un solo parabrezza in ogni passaggio. – nemesv

1

uso Linq:

List<Car> _cars; 
FillList(_cars); 
foreach (Windshield ws in _cars.Select(c=>c.Windshield) { 
     ws.DoWorkA(); 
     ws.DoWorkB(); 
     ws.DoWorkC(); 
    } 
Problemi correlati