2011-07-11 286 views
4

假設以下類:從對象數組中檢索屬性的數組

class Person 
{ 
    public string FirstName {get;set;} 
    public string LastName {get;set;} 
} 

假設我有一個Person對象的列表或數組。有沒有辦法使用LINQ從所有數組元素中檢索FirstName屬性並返回一個字符串數組。我有一種感覺,我以前見過這樣的東西。

希望這個問題有意義。

回答

10

當然,很容易:

Person[] people = ...; 
string[] names = people.Select(x => x.FirstName).ToArray(); 

,除非你真的需要結果是一個數組,雖然,我會考慮使用ToList()代替ToArray(),並有可能只是把它當作一個惰性計算IEnumerable<string>(即只是請致電Select)。這取決於你將如何處理結果。

+0

HAA!而已? – Skadoosh

+1

@KP:是的。 LINQ岩石。 –

3

如果你有一個陣列,然後就個人而言,我會使用:

Person[] people = ... 
string[] names = Array.ConvertAll(people, person => person.FirstName); 

這裏;它避免了一些重新分配,並在更多版本的.NET上工作。同樣:

List<Person> people = ... 
List<string> names = people.ConvertAll(person => person.FirstName); 

LINQ將工作,但實際上並不需要這裏

+0

+1用於演示,但個人而言,我可能仍會使用LINQ--因爲它現在可以說更具慣用性,並且在面對不斷變化的需求或改變輸入類型時會更加靈活。我會在性能敏感的代碼中使用'Array.ConvertAll',當然也可以使用.NET 2.0。 –

1

試試這個:

List<Person> people = new List<Person>(); 
people.Add(new Person() 
    { 
     FirstName = "Brandon", 
     LastName = "Zeider" 
    }); 
people.Add(new Person() 
{ 
    FirstName = "John", 
    LastName = "Doe" 
}); 

var firstNameArray = people.Select(p => p.FirstName).ToArray(); 
+0

你可以使你的設置代碼相當簡單,使用對象和集合初始值設定項:) –

+0

你當然是對的喬恩(你不是總是哈哈)。如果我的瀏覽器刷新了,我會看到你和Marc已經回答了,我不會感到困擾。 :) – BrandonZeider