从IList<string>
或IEnumerable<string>
创建以逗号分隔的字符串值列表的最简洁方法是什么?
String.Join(...)
对string[]
操作,因此当IList<string>
或IEnumerable<string>
无法轻松转换为字符串数组时,使用起来会非常麻烦。
.NET 4+
IList<string> strings = new List<string>{"1","2","testing"};
string joined = string.Join(",", strings);
详细信息和 Pre .Net 4.0 解决方案
使用 LINQ(.NET 3.5)可以非常轻松地将IEnumerable<string>
转换为字符串数组:
IEnumerable<string> strings = ...;
string[] array = strings.ToArray();
如果需要,可以很容易地编写等效的辅助方法:
public static T[] ToArray(IEnumerable<T> source)
{
return new List<T>(source).ToArray();
}
然后像这样称呼它:
IEnumerable<string> strings = ...;
string[] array = Helpers.ToArray(strings);
然后你可以调用string.Join
。当然,你不必使用一个辅助方法:
// 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.Join
有更多的重载,所以你实际上可以写:
string joined = string.Join(",", strings);
更简单:)
仅供参考,.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)
我能看到的最简单的方法是使用 LINQ Aggregate
方法:
string commaSeparatedList = input.Aggregate((a, x) => a + ", " + x)