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

有没有办法把 List 转换成逗号分隔的字符串?

我知道我可以循环构建但不知怎么的,我觉得你们中的一些人做这件事的方式更酷?

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

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

我的“聪明”一词是:

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

只是不知道怎么有条件地加逗号。

为了获得更好的效果,我会在 IEnumable < T > 上使用这个扩展方法,这样它就可以在任何 IEnumable 上工作:

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

使用方法如下:

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

对于这个问题稍微复杂一点的版本,大约有数不清的解决方案——其中许多是缓慢的、有 bug 的,甚至不能编译——请看我的文章中关于这个主题的评论:

Https://learn.microsoft.com/en-us/archive/blogs/ericlippert/comma-quibbling

以及 StackOverflow 的评论:

埃里克 · 利伯特的挑战“逗号吹毛求疵”,最佳答案?

看起来挺快的。

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};
string.Join<int>(",", list)

我刚才在代码中使用了它,效果很好。

你可以使用 System.Linq 库; 它的效率更高:

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