【发布时间】:2011-04-04 06:04:16
【问题描述】:
C#中是否有一个函数可以快速将一些集合转换为字符串并用分隔符分隔值?
例如:
List<string> names --> string names_together = "John, Anna, Monica"
【问题讨论】:
C#中是否有一个函数可以快速将一些集合转换为字符串并用分隔符分隔值?
例如:
List<string> names --> string names_together = "John, Anna, Monica"
【问题讨论】:
您可以使用String.Join。如果您有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>。
结果:
约翰、安娜、莫妮卡
【讨论】:
如果你愿意,你也可以用 linq 做到这一点
var names = new List<string>() { "John", "Anna", "Monica" };
var joinedNames = names.Aggregate((a, b) => a + ", " + b);
虽然我更喜欢 Quartermeister 回答中的非 linq 语法,但我认为 Aggregate 的执行速度可能会更慢(可能更多的字符串连接操作)。
【讨论】:
Aggregate 更适合数学类型的运算。对于字符串,此操作类似于 for each ing,只是附加到一个效率非常低的字符串,因为您正在为列表中存在的每个项目创建一个新字符串。
StringBuilder.AppendJoin() 看起来正是操作人员需要的:var names = new List<string>() { "John", "Anna", "Monica" }; string joinedNames = new StringBuilder().AppendJoin(", ", names); 与string.Join() 大致相同,我没有对此进行性能测试。如果您迫切需要一个没有聚合的 Linq 表单:var names = new List<string>() { "John", "Anna", "Monica" }; var joinedNames = new System.Text.StringBuilder(); names.ForEach(a => joinedNames.Append((joinedNames.Length > 0 ?", " : "") + a)); //joinedNames.ToString();