2009-06-15 28 views
10

Mam listę elementów określonej klasy. Ta klasa zawiera pole.C# Wypakuj listę pól z listy klasy

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

Chciałbym wyodrębnić pole z wszystkich pozycji na liście do nowej listy.

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

Jest na pewno wiele sposobów na zrobienie tego, ale nie znalazłem jeszcze fajnie wyglądającego rozwiązania. Pomyślałem, że linq może pomóc, ale nie byłem pewien, jak dokładnie.

Odpowiedz

18

Wystarczy:

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

lub

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

Ten ostatni jest bardziej wydajny (bo zna ostateczną wielkość na początek), ale działa tylko na listach i tablicach zamiast dowolny arbitralny sekwencja.

+0

Skarbie, dwa razy wyciśnięte już dziś rano ;-p –

+0

Dzięki Jon, Marc, to było szybkie. :) – mafu

+0

Czy istnieje jakiś dobry powód, dla którego LINQ nie jest wystarczająco inteligentny, aby wiedzieć w tym scenariuszu, że ostatecznym rozmiarem będzie "list.Count"? –

Powiązane problemy