2009-06-15 18 views
10

Belirli bir sınıfa ait öğeler listesi var. Bu sınıf bir alan içerir.C# Sınıf listesinden alanların listesini ayıkla

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

Listedeki tüm öğelerden alanı yeni bir listeye çıkarmak istiyorum.

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

Bunu yapmak için pek çok yol var, ancak henüz hoş bir çözüm bulamadım. Linq'in yardımcı olabileceğini düşündüm, ama tam olarak ne olduğundan emin değildim.

cevap

18

Sadece:

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

veya

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

(eğer başlangıçta son boyutunu bildiği için), fakat sadece rasgele herhangi ziyade listeleri ve diziler için çalışacak sıra.

+0

Darn, bu sabah zaten iki kez pense atıldı; -p –

+0

Teşekkürler Jon, Marc, hızlıydı. :) – mafu

+0

LINQ'un bu senaryoda son büyüklüğün "list.Count" olacağını bilecek kadar iyi bir nedeni yok mu? –

İlgili konular