C#将<string>列表到带分隔符的字符串

nan*_*nan 584 c# string list delimiter

C#中是否有一个函数可以快速将某些集合转换为字符串并使用分隔符分隔值?

例如:

List<string> names - > string names_together = "John, Anna, Monica"

Qua*_*ter 1099

你可以用String.Join.如果你有,List<string>那么你可以ToArray先打电话:

List<string> names = new List<string>() { "John", "Anna", "Monica" };
var result = String.Join(", ", names.ToArray());
Run Code Online (Sandbox Code Playgroud)

在.NET 4中,您不再需要它ToArray,因为存在重载String.Join需要IEnumerable<string>.

  • `string.Join`(小写的 `string`)比大写的更可取,因为在某些情况下它可以让您不必在文件顶部添加 `using System;`。 (14认同)

Bob*_*Bob 85

如果您愿意,也可以使用linq执行此操作

var names = new List<string>() { "John", "Anna", "Monica" };
var joinedNames = names.Aggregate((a, b) => a + ", " + b);
Run Code Online (Sandbox Code Playgroud)

虽然我更喜欢Quartermeister的答案中的非linq语法,但我认为Aggregate可能执行得更慢(可能更多的字符串连接操作).

  • 感谢快速回复,两者都很好.你是对的我用Stopwatch类做了一个小的性能测量,而linq-way慢得多:String.Join(",",names.ToArray()); - >取18个刻度聚合((a,b)=> a +","+ b) - >取736个刻度 (16认同)
  • 是的,我认为 `Aggregate` 更适合数学类型的操作。对于字符串,此操作类似于 `for each` ing 并且只是附加到一个字符串中,这是非常低效的,因为您正在为列表中存在的每个项目创建一个新字符串。 (2认同)

Ale*_*lex 5

基于已接受答案的扩展方法,我在所有项目中使用:

public static string StringJoin(this IEnumerable<string> values, string separator)
{
    return string.Join(separator, values);
}
Run Code Online (Sandbox Code Playgroud)

用法:

var result = names.StringJoin(", ");
Run Code Online (Sandbox Code Playgroud)

PS 不要用Aggregate这个,它string.Join