在C#中,有一种"简单"的方法来执行string.Join复杂类型列表吗?

Cha*_*eus 20 c# string

假设我有这个对象:

public class Role {
    public string Name { get; set; }
    public string Slug { get; set; }
    public DateTime DateAssigned { get; set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

Maa*_*ten 57

using System.Linq

string.Join(",", member.Roles.Select(r => r.Name))
Run Code Online (Sandbox Code Playgroud)

  • `使用System.Linq` (4认同)

Nik*_*wal 8

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

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

public override String ToString()
{
    return String.Format("Name: {0}. Slug : {1}", Name, Slug);
}
Run Code Online (Sandbox Code Playgroud)

等等,然后称之为

 String.Join(", ", member.Roles);
Run Code Online (Sandbox Code Playgroud)

你不需要打电话

String.Join(", ", member.Roles.Select(x => x.ToString())
Run Code Online (Sandbox Code Playgroud)

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

String.Join(", ", member.Roles);
Run Code Online (Sandbox Code Playgroud)


Tim*_*ter 5

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

String joined = string.Join(",", member.Roles.Select(r => r.Name));
Run Code Online (Sandbox Code Playgroud)