如何在特定属性上加入通用的对象列表

Ant*_*ony 12 .net c# list

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

 List<Person> theList = populate it with a list of Person objects
Run Code Online (Sandbox Code Playgroud)

如何获取一个字符串,其中包含以逗号分隔的列表中对象的所有FirstName.例如:约翰,彼得,杰克

一个基本的解决方案是迭代每个对象,但我确信有一个单行解决方案.

谢谢.

Rex*_*x M 19

更新(从.NET 4开始) string.Join现在有一个过载需要IEnumerable<string>- yay!

string.Join(",", theList.Select(p => p.FirstName));
Run Code Online (Sandbox Code Playgroud)

对于4.0以下的 .NET版本(较旧版本):

string.Join(",", theList.ConvertAll(person => person.FirstName).ToArray());
Run Code Online (Sandbox Code Playgroud)

将其分解为组成部分:

List<T>.ConvertAll将a转换List<T>为另一种类型 - 在本例中为a List<string>.

ToArray()转换List<string>为a string[].

string.Join() 将字符串数组(第二个参数)写为单个字符串,由第一个参数分隔.

  • 解决方案"更新(从.NET 4开始)"如何只加入FirstNames? (2认同)

Ada*_*son 6

您还可以使用查询扩展方法

string output = theList.Select(p => p.FirstName).Aggregate((progress, next) => progress + ", " + next);
Run Code Online (Sandbox Code Playgroud)

这将避免必须创建一个数组.