首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将泛型列表转换为CSV字符串

将泛型列表转换为CSV字符串
EN

Stack Overflow用户
提问于 2009-12-12 02:45:54
回答 15查看 180.6K关注 0票数 150

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

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

你的想法是什么?这是最好的方法吗?

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

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2009-12-12 02:47:18

令人惊讶的是,框架已经为我们做了什么。

代码语言:javascript
复制
List<int> myValues;
string csv = String.Join(",", myValues.Select(x => x.ToString()).ToArray());

对于一般情况:

代码语言:javascript
复制
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正式发布之前编写的。现在我们可以说

代码语言:javascript
复制
IEnumerable<T> sequence;
string csv = String.Join(",", sequence);

使用重载String.Join(string, IEnumerable)。此方法会自动将每个元素x投影到x.ToString()

票数 270
EN

Stack Overflow用户

发布于 2012-02-13 19:26:03

在3.5版本中,我仍然能够做到这一点。它要简单得多,不需要lambda。

代码语言:javascript
复制
String.Join(",", myList.ToArray<string>());
票数 15
EN

Stack Overflow用户

发布于 2009-12-12 02:53:05

您可以创建一个可以在任何IEnumerable上调用的扩展方法:

代码语言:javascript
复制
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());
}

然后,您可以只调用原始列表上的方法:

代码语言:javascript
复制
string commaSeparated = myList.JoinStrings(", ");
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1890093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档