从IList<string>或IEnumerable<string>创建逗号分隔的字符串值列表的最干净的方法是什么?

string . join(…)操作在字符串[]上,因此当IList<string>或IEnumerable<string>等类型不能轻松转换为字符串数组时,处理起来很麻烦。


当前回答

我认为创建逗号分隔的字符串值列表的最简单的方法是:

string.Join<string>(",", stringEnumerable);

下面是一个完整的例子:

IEnumerable<string> stringEnumerable= new List<string>();
stringList.Add("Comma");
stringList.Add("Separated");

string.Join<string>(",", stringEnumerable);

不需要创建helper函数,这是在。net 4.0及以上版本中内置的。

其他回答

要从IList<string>或IEnumerable<string>创建一个逗号分隔的列表,除了使用string. join()外,还可以使用StringBuilder。AppendJoin方法:

new StringBuilder().AppendJoin(", ", itemList).ToString();

or

$"{new StringBuilder().AppendJoin(", ", itemList)}";

供你参考,.NET 4.0版本的string.Join()有一些额外的重载,用于IEnumerable,而不仅仅是数组,包括一个可以处理任何类型T的重载:

public static string Join(string separator, IEnumerable<string> values)
public static string Join<T>(string separator, IEnumerable<T> values)

在这个讨论中有点晚了,但这是我的贡献。我有一个IList<Guid> OrderIds要转换为CSV字符串,但以下是通用的,工作与其他类型的未修改:

string csv = OrderIds.Aggregate(new StringBuilder(),
             (sb, v) => sb.Append(v).Append(","),
             sb => {if (0 < sb.Length) sb.Length--; return sb.ToString();});

简短和甜蜜的,使用StringBuilder构造新字符串,缩小StringBuilder的长度以删除最后一个逗号,并返回CSV字符串。

我已经将其更新为使用多个Append()来添加字符串+逗号。根据James的反馈,我使用Reflector来查看StringBuilder.AppendFormat()。原来AppendFormat()使用一个StringBuilder来构造格式字符串,这使得它在这个上下文中比使用多个appendds()效率更低。

你也可以使用下面的方法将它转换为一个数组,使用其他人列出的方法之一:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Configuration;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            CommaDelimitedStringCollection commaStr = new CommaDelimitedStringCollection();
            string[] itemList = { "Test1", "Test2", "Test3" };
            commaStr.AddRange(itemList);
            Console.WriteLine(commaStr.ToString()); //Outputs Test1,Test2,Test3
            Console.ReadLine();
        }
    }
}

编辑:这是另一个例子

使用. net 3.5中的Linq扩展,可以很容易地将它们转换为数组。

   var stringArray = stringList.ToArray();