28

假设我有这个对象:

public class Role {
    public string Name { get; set; }
    public string Slug { get; set; }
    public DateTime DateAssigned { get; set; }
    ...
}

一个成员可以有多个角色:member.Roles = List<Role>();

如果我想将成员的角色加入角色名称的逗号分隔列表中,是否有一种简单的方法(类似于string.Join(",", member.Roles);- 因为角色是复杂类型而不起作用)?

4

5 回答 5

69
using System.Linq

string.Join(",", member.Roles.Select(r => r.Name))
于 2012-08-16T13:16:47.207 回答
11

如果您只想要 Name 属性,那么其他答案都很好

但是如果你有更多的属性,调整你ToString()的匹配:

public override String ToString()
{
    return String.Format("Name: {0}. Slug : {1}", Name, Slug);
}

等,然后将其称为

 String.Join(", ", member.Roles);

你不需要打电话

String.Join(", ", member.Roles.Select(x => x.ToString())

因为它会被内部对象调用String.Join(),所以如果你覆盖ToString(),你只需调用

String.Join(", ", member.Roles);
于 2012-08-16T13:43:44.513 回答
6

是的,您可以使用String.Join(.NET 4 中的新功能)的重载,它需要IEnumerable<String>一点 Linq:

String joined = string.Join(",", member.Roles.Select(r => r.Name));
于 2012-08-16T13:17:43.097 回答
2

另一种选择是覆盖类的ToString()方法Role以返回您想要的内容,然后发出此语句。

var joined = string.Join(",", member.Roles)
于 2012-08-16T13:38:07.387 回答
0

如果要在逗号分隔值中选择多个属性:

var csvdata = member.Roles.Select(x => string.Join(",", new string[] { x.Name, x.Slug , x.DateAssigned}));
               

我有这个要求选择多个属性到 csv。可能这可能会帮助某人。

于 2022-02-01T13:19:55.467 回答