协慌网

登录 贡献 社区

从 IList <string> 或 IEnumerable <string> 创建逗号分隔列表

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)