一尘不染

将通用列表转换为CSV字符串

c#

我有一个整数值列表(列表),并想生成一个逗号分隔值的字符串。那就是列表中的所有项目输出到一个逗号分隔的列表中。

我的想法… 1.将列表传递给方法。2.使用stringbuilder迭代列表并附加逗号。3.测试最后一个字符,如果它是逗号,则将其删除。

你怎么看?这是最好的方法吗?

如果将来我不仅要处理整数(当前的计划)而且要处理字符串,长整型,双精度型,布尔型等,我的代码将如何更改?我想让它接受任何类型的列表。


阅读 581

收藏
2020-05-19

共1个答案

一尘不染

框架已经为我们做的事情真是令人惊讶。

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<T>(string, IEnumerable<T>)。此方法将自动将每个元素投影xx.ToString()

2020-05-19