从对象数组中检索属性的数组

Ska*_*osh 4 c# linq

假设以下课程:

class Person
{
   public string FirstName {get;set;}
   public string LastName {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

让我们说我有一个列表或一个Person对象数组.有没有办法使用LINQ从所有数组元素中检索FirstName属性并返回一个字符串数组.我有一种感觉,我以前见过这样的东西.

希望这个问题有道理.

Jon*_*eet 13

当然,很容易:

Person[] people = ...;
string[] names = people.Select(x => x.FirstName).ToArray();
Run Code Online (Sandbox Code Playgroud)

除非您确实需要将结果作为数组,否则我会考虑使用ToList()而不是ToArray(),并且可能只是将其作为延迟评估IEnumerable<string>(即调用Select).这取决于你将如何处理结果.


Mar*_*ell 6

如果您有一个阵列,那么就个人而言,我会使用:

Person[] people = ...
string[] names = Array.ConvertAll(people, person => person.FirstName);
Run Code Online (Sandbox Code Playgroud)

这里; 它避免了一些重新分配,并适用于更多版本的.NET.同样:

List<Person> people = ...
List<string> names = people.ConvertAll(person => person.FirstName);
Run Code Online (Sandbox Code Playgroud)

LINQ可以工作,但这里实际上并不需要.