假设以下类:从对象数组中检索属性的数组
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岩石。 –