2009-06-15 12 views
10

Ho una lista di elementi di una certa classe. Questa classe contiene un campo.C# Estrarre l'elenco dei campi dall'elenco della classe

class Foo {public int i;} 
List<Foo> list; 

Mi piacerebbe estrarre il campo da tutti gli elementi nell'elenco in una nuova lista.

List<int> result = list.ExtractField (e => e.i); // imaginary 

Ci sono sicuramente molti modi per farlo, ma non ho ancora trovato una soluzione di bell'aspetto. Ho pensato che linq potesse aiutare, ma non ero sicuro di come esattamente.

risposta

18

Just:

List<int> result = list.Select(e => e.i).ToList(); 

o

List<int> result = list.ConvertAll(e => e.i); 

Il secondo è più efficiente (perché conosce la dimensione finale per cominciare), ma funziona solo per le liste e array piuttosto che qualsiasi arbitraria sequenza.

+0

Dann, due volte pipped già questa mattina ;-p –

+0

Grazie Jon, Marc, è stato veloce. :) – mafu

+0

C'è qualche buona ragione per cui LINQ non è abbastanza intelligente da sapere in questo scenario che la dimensione finale sarà 'list.Count'? –

Problemi correlati