C#List <string>到带分隔符的字符串


631

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

例如:

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

Answers:


1201

您可以使用String.Join。如果您有a,List<string>则可以ToArray先致电:

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

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

结果:


约翰,安娜,莫妮卡


95

您也可以使用linq进行此操作

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

尽管我在Quartermeister的答案中更喜欢使用非linq语法,但我认为Aggregate执行起来可能会更慢(可能会执行更多的字符串连接操作)。


19
感谢您的快速答复,两者都工作正常。没错,我使用Stopwatch类进行了小规模的性能评估,并且linq-way的速度要慢得多:String.Join(“,”,names.ToArray()); - >历时18蜱骨料((A,B)=>一个+ “” + B) - >带736个的蜱

2
是的,我认为Aggregate数学类型的运算更好。对于字符串,此操作类似于for eaching,只是附加到效率很低的字符串上,因为您将为列表中存在的每个项目创建一个新字符串。
鲍勃

请注意,如果容器为空,则没有种子值的聚合将引发InvalidOperationException。使用种子版本的Aggregate(seed,func)避免错误处理代码或条件检查。String.Join不会抛出空,因此不需要种子或额外的代码……而且它不需要Linq,语法也更加清晰。
Huacanacha

1
如果您使用StringBuilder,则上面示例中的Aggregate可能会工作得更快。不建议使用“ +”执行多个串联。见备注节在这里(msdn.microsoft.com/en-us/library/...
伊利亚·杰尼索夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.