我有一个整数值列表( list ),我想生成一个逗号分隔值的字符串。也就是说,列表中的所有项都输出到一个逗号分隔的列表中。
我的想法..。1.将列表传递给一个方法。2.使用stringbuilder迭代列表并添加逗号3.测试最后一个字符,如果是逗号,则将其删除。
你的想法是什么?这是最好的方法吗?
如果我不仅想要处理整数(我当前的计划),而且想在将来处理字符串、长整型、双精度型、布尔型等,我的代码将如何更改?我想让它接受任何类型的列表。
发布于 2009-12-12 02:47:18
令人惊讶的是,框架已经为我们做了什么。
List<int> myValues;
string csv = String.Join(",", myValues.Select(x => x.ToString()).ToArray());对于一般情况:
IEnumerable<T> myList;
string csv = String.Join(",", myList.Select(x => x.ToString()).ToArray());正如您所看到的,它实际上没有什么不同。注意,如果x.ToString()包含逗号,则可能需要将x.ToString()用引号(即"\"" + x.ToString() + "\"")括起来。
关于这一点的一个有趣的读物:参见Eric Lippert博客上的Comma Quibbling。
注意:本文是在.NET 4.0正式发布之前编写的。现在我们可以说
IEnumerable<T> sequence;
string csv = String.Join(",", sequence);使用重载String.Join(string, IEnumerable)。此方法会自动将每个元素x投影到x.ToString()。
发布于 2012-02-13 19:26:03
在3.5版本中,我仍然能够做到这一点。它要简单得多,不需要lambda。
String.Join(",", myList.ToArray<string>());发布于 2009-12-12 02:53:05
您可以创建一个可以在任何IEnumerable上调用的扩展方法:
public static string JoinStrings<T>(
this IEnumerable<T> values, string separator)
{
var stringValues = values.Select(item =>
(item == null ? string.Empty : item.ToString()));
return string.Join(separator, stringValues.ToArray());
}然后,您可以只调用原始列表上的方法:
string commaSeparated = myList.JoinStrings(", ");https://stackoverflow.com/questions/1890093
复制相似问题