将List <int>转换为逗号分隔的string

有没有办法把一个列表,并将其转换为一个逗号分隔的string?

我知道我可以循环和build立它,但不知何故,我认为你们中的一些人是一个更酷的方式呢?

我真的想学习这些types的“技巧”,所以请解释或链接到您使用的方法的文档。

List<int> list = ...; string.Join(",", list.Select(n => n.ToString()).ToArray()) 

简单的解决scheme是

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

我刚刚在我的代码中使用它,工作很快乐。

 List<int> list = new List<int> { 1, 2, 3 }; Console.WriteLine(String.Join(",", list.Select(i => i.ToString()).ToArray())); 

对于这个问题稍微复杂的版本,大约有一个gazillion的解决scheme – 其中很多是缓慢的,越野车,甚至没有编译 – 请参阅我的文章在这个问题上的评论:

http://blogs.msdn.com/ericlippert/archive/2009/04/15/comma-quibbling.aspx

和StackOverflow评论:

Eric Lippert挑战“逗号争吵”,最好的答案是什么?

为了额外的凉爽,我会在IEnumerable <T>上做一个扩展方法,以便它可以在任何IEnumerable上工作:

 public static class IEnumerableExtensions { public static string BuildString<T>(this IEnumerable<T> self, string delim) { return string.Join(",", self) } } 

使用它如下:

 List<int> list = new List<int> { 1, 2, 3 }; Console.WriteLine(list.BuildString(", ")); 

看似合理。

 IList<int> listItem = Enumerable.Range(0, 100000).ToList(); var result = listItem.Aggregate<int, StringBuilder, string>(new StringBuilder(), (strBuild, intVal) => { strBuild.Append(intVal); strBuild.Append(","); return strBuild; }, (strBuild) => strBuild.ToString(0, strBuild.Length - 1)); 

我的“聪明”条目:

  List<int> list = new List<int> { 1, 2, 3 }; StringBuilder sb = new StringBuilder(); var y = list.Skip(1).Aggregate(sb.Append(x.ToString()), (sb1, x) => sb1.AppendFormat(",{0}",x)); // A lot of mess to remove initial comma Console.WriteLine(y.ToString().Substring(1,y.Length - 1)); 

只是还没有想到如何有条件地添加逗号。