2012-08-16 40 views
17

比方说,我有这样的对象:在C#中,是否有一种“简单”的方式来执行string.Join复杂类型列表?

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); - 由于角色是复杂类型而不起作用)?

+0

也许使用像'member.Roles.Select <角色,字符串>(X = > x.Name).ToList ()'? – 2012-08-16 13:17:01

回答

44
using System.Linq 

string.Join(",", member.Roles.Select(r => r.Name)) 
+0

这就是我的意思=)+1 – 2012-08-16 13:17:28

+4

'使用System.Linq' – 2012-08-16 13:17:43

+1

岩石上,感谢真正快速的答案(和使用声明,上校Panic!) – Chaddeus 2012-08-16 13:43:29

5

是的,你可以使用的String.Join(新的.NET 4)超载这需要一个IEnumerable<String>和LINQ的一点:

String joined = string.Join(",", member.Roles.Select(r => r.Name)); 
2

另外一个选择是覆盖ToString()方法的Role类返回你想要的,然后发出这个声明。

var joined = string.Join(",", member.Roles) 
8

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

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

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

等,然后调用它as

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

您不需要致电

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

,因为它会在内部通过对象的内部String.Join()调用,所以如果重写ToString(),你只需要调用

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

真棒,感谢您的提示! – Chaddeus 2012-08-16 13:44:30

+1

只是优雅。 +1 – 2017-12-01 10:15:58

+0

@DanielMarín:谢谢:) – 2017-12-01 11:36:30

相关问题