我可以在通用列表中使用string.join

时间:2015-11-19 05:01:36

标签: c#

有没有办法获取通用列表并将某个属性加入逗号分隔值?

public class Color
{
  public int Id {get; set;}
  public string Name{get; set;}
}

List<Color> list = new List<Color>();
Color c1 = new Color() { Id = 1, Name = "red" }
Color c2 = new Color() { Id = 2, Name = "blue" }

我可以做点什么吗

list.Join(

获取

"red, blue";

4 个答案:

答案 0 :(得分:5)

不,你不能。此方法定义为string.Join(String, String[])。有一种方法可以完成你想要做的事情:

string.Join(",", list.Select(c=>c.Name).ToArray());

答案 1 :(得分:2)

此扩展程序Join代表LINQ Join

List<Color> list = new List<Color>();
list.Join(...)

如果要在字符串中连接集合,则需要使用String.Join 以下内容将生成所需的"red, blue"字符串:

String.Join(", ", list.Select(x => x.Name));

答案 2 :(得分:0)

您可以将String.Join用于泛型。但要得到你想要的东西,你必须对你的代码做一些修改,否则你会得到这样的结果:

Namespace.Color, Namespace.Color

选项A,如mrtig建议:

String.Join(",", list.Select(x=>x.Name))

选项B,使用ToString扩展您的类:

public class Color
{
  public int Id {get; set;}
  public string Name{get; set;}
  public string ToString(){
    return this.Name;
  }
}

现在你可以使用:

String.Join(",",list) //where list is IEnumerable<Color>

答案 3 :(得分:0)

当然,从.NET 4 String.Join开始String.Join(string, IEnumerable<string>)过载。您甚至可以避免使用String.Join(string, IEnumerable<T>)重载来调用ToString

所以这些都是有效的:

String.Join(",", new List<int> { 1, 2, 3 });
String.Join(",", new List<string> { "1", "2", "3" });