将List <int>转换为逗号分隔的字符串</int>

时间:2009-10-06 23:45:06

标签: c# collections

有没有办法获取List并将其转换为逗号分隔的字符串?

我知道我可以循环并构建它,但不知怎的,我认为你们中的一些人更酷的做法呢?

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

8 个答案:

答案 0 :(得分:165)

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

答案 1 :(得分:87)

简单的解决方案是

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

我刚刚在我的代码中使用它,工作得很好。

答案 2 :(得分:9)

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

答案 3 :(得分:6)

对于这个问题稍微复杂一点的大约一个解决方案 - 其中许多是缓慢的,错误的,甚至不编译 - 请参阅我关于这个主题的文章的评论:

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

和StackOverflow评论:

Eric Lippert's challenge "comma-quibbling", best answer?

答案 4 :(得分:3)

为了获得额外的酷感,我会将其作为IEnumerable&lt; T&gt;的扩展方法。所以它适用于任何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(", "));

答案 5 :(得分: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));

还没想出如何有条件地添加逗号。

答案 6 :(得分:1)

看起来很快。

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));

答案 7 :(得分:0)

您可以使用System.Linq库;效率更高:

using System.Linq;
string str =string.Join(",", MyList.Select(x => x.NombreAtributo));