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

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


当前回答

如果你想要连接的字符串在对象列表中,那么你也可以这样做:

var studentNames = string.Join(", ", students.Select(x => x.name));

其他回答

.NET 4 +。

IList<string> strings = new List<string>{"1","2","testing"};
string joined = string.Join(",", strings);

Detail & Pre .Net 4.0解决方案

IEnumerable<string>可以很容易地用LINQ转换成一个字符串数组。NET 3.5):

IEnumerable<string> strings = ...;
string[] array = strings.ToArray();

如果你需要,编写等效的helper方法很容易:

public static T[] ToArray(IEnumerable<T> source)
{
    return new List<T>(source).ToArray();
}

然后这样称呼它:

IEnumerable<string> strings = ...;
string[] array = Helpers.ToArray(strings);

然后你可以调用string.Join。当然,你不需要使用helper方法:

// C# 3 and .NET 3.5 way:
string joined = string.Join(",", strings.ToArray());
// C# 2 and .NET 2.0 way:
string joined = string.Join(",", new List<string>(strings).ToArray());

后者有点拗口:)

这可能是最简单的方法,而且性能也很好——关于性能究竟是什么样的,还有其他问题,包括(但不限于)这个问题。

从。net 4.0开始,字符串中有更多的重载可用。加入,你可以这样写

string joined = string.Join(",", strings);

简单多了:)

希望这是最简单的方法

 string Commaseplist;
 string[] itemList = { "Test1", "Test2", "Test3" };
 Commaseplist = string.join(",",itemList);
 Console.WriteLine(Commaseplist); //Outputs Test1,Test2,Test3

你可以在列表和IEnumerables上使用. toarray(),然后根据需要使用String.Join()。

在阅读本文之前,我刚刚解决了这个问题。我的解决方案如下:

   private static string GetSeparator<T>(IList<T> list, T item)
   {
       return (list.IndexOf(item) == list.Count - 1) ? "" : ", ";
   }

被称为:

List<thing> myThings;
string tidyString;

foreach (var thing in myThings)
{
     tidyString += string.format("Thing {0} is a {1}", thing.id, thing.name) + GetSeparator(myThings, thing);
}

我也可以这样简单地表达,也会更有效率:

string.Join(“,”, myThings.Select(t => string.format(“Thing {0} is a {1}”, t.id, t.name)); 

我们有一个效用函数,大概是这样的

public static string Join<T>( string delimiter, 
    IEnumerable<T> collection, Func<T, string> convert )
{
    return string.Join( delimiter, 
        collection.Select( convert ).ToArray() );
}

它可以用来轻松地加入大量的集合:

int[] ids = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233};

string csv = StringUtility.Join(",", ids, i => i.ToString() );

注意,我们在lambda之前有一个集合参数,因为智能感知随后会拾取集合类型。

如果你已经有一个字符串枚举,你需要做的就是ToArray:

string csv = string.Join( ",", myStrings.ToArray() );