假設以下類:從對象數組中檢索屬性的數組
class Person
{
public string FirstName {get;set;}
public string LastName {get;set;}
}
假設我有一個Person對象的列表或數組。有沒有辦法使用LINQ從所有數組元素中檢索FirstName屬性並返回一個字符串數組。我有一種感覺,我以前見過這樣的東西。
希望這個問題有意義。
假設以下類:從對象數組中檢索屬性的數組
class Person
{
public string FirstName {get;set;}
public string LastName {get;set;}
}
假設我有一個Person對象的列表或數組。有沒有辦法使用LINQ從所有數組元素中檢索FirstName屬性並返回一個字符串數組。我有一種感覺,我以前見過這樣的東西。
希望這個問題有意義。
當然,很容易:
Person[] people = ...;
string[] names = people.Select(x => x.FirstName).ToArray();
,除非你真的需要的結果是一個數組,雖然,我會考慮使用ToList()
代替ToArray()
,並有可能只是把它當作一個惰性計算IEnumerable<string>
(即只是請致電Select
)。這取決於你將如何處理結果。
如果你有一個陣列,然後就個人而言,我會使用:
Person[] people = ...
string[] names = Array.ConvertAll(people, person => person.FirstName);
這裏;它避免了一些重新分配,並在更多版本的.NET上工作。同樣:
List<Person> people = ...
List<string> names = people.ConvertAll(person => person.FirstName);
LINQ將工作,但實際上並不需要這裏。
+1用於演示,但個人而言,我可能仍會使用LINQ--因爲它現在可以說更具慣用性,並且在面對不斷變化的需求或改變輸入類型時會更加靈活。我會在性能敏感的代碼中使用'Array.ConvertAll',當然也可以使用.NET 2.0。 –
試試這個:
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();
你可以使你的設置代碼相當簡單,使用對象和集合初始值設定項:) –
你當然是對的喬恩(你不是總是哈哈)。如果我的瀏覽器刷新了,我會看到你和Marc已經回答了,我不會感到困擾。 :) – BrandonZeider
HAA!而已? – Skadoosh
@KP:是的。 LINQ岩石。 –