Answers:
List<int> list = ...;
string.Join(",", list.Select(n => n.ToString()).ToArray())
简单的解决方案是
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()));
对于这个问题稍微复杂一点的大约一千亿解决方案-其中许多是缓慢,错误的甚至没有编译的-请参阅我对此主题的评论:
http://blogs.msdn.com/ericlippert/archive/2009/04/15/comma-quibbling.aspx
和StackOverflow评论:
为了更酷,我将其作为IEnumerable <T>的扩展方法,使其可用于任何IEnumerable:
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(", "));
return string.Join(delim, self);
似乎合理地快。
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));
只是还没有弄清楚如何有条件地添加逗号。
Select
在lambda中写有副作用。在这种情况下,您甚至都没有使用y
,因此Select
本质上您只是一个foreach
-因此就这样编写。
Select
是foreach
“有趣的” ,而是“滥用”。这里更有趣的方法是使用Enumerable.Aggregate
with StringBuilder
作为种子值-试试看。
您可以使用System.Linq库;效率更高:
using System.Linq;
string str =string.Join(",", MyList.Select(x => x.NombreAtributo));