有很多方法可以实现这一点,但我怀疑正确的答案是“视情况而定”。您创建 CSV 字符串的原始示例使用字符串连接运算符;推荐的方法是为此目的使用StringBuilder类。在 .Net 4.0 中有一个新的string.Join()方法重载,使用和理解要简单得多。
// .Net 3.5
var list = new List<int>{1,2,3};
var csv = list.Aggregate(new StringBuilder(),
(sb, i) => sb.Append(i).Append(','),
sb => { if (sb.Length > 0) sb.Length--; return sb.ToString(); });
// .Net 4.0
var csv1 = string.Join(",", list);
如果您的意图是创建 XML 文档而不是字符串,那么上面David B的回答是一个不错的选择:
var xml = new XElement("Root", list.Select(i => new XElement("ID", i)));
// <Root>
// <ID>1</ID>
// <ID>2</ID>
// <ID>3</ID>
// </Root>
对于创建 XML 字符串,我更喜欢避免显式编码开始和结束标记。在您的示例中,很难在开始或结束标签中使元素名称“ID”不正确,但我认为这是根据 DRY 原则。有时我在修改开始标签时忘记修改元素的结束标签,例如在配置文件中。使用XElement完全避免了这个问题:
// .Net 3.5
var xml1 = list.Aggregate(new StringBuilder(),
(sb, i) => sb.Append(new XElement("ID", i)),
sb => sb.ToString());
// .Net 4.0
var xml2 = string.Join("", list.Select (i => new XElement("ID", i)));
// both xml1 & xml2 contain "<ID>1</ID><ID>2</ID><ID>3</ID>"
Aggregate()与string.Join()的性能,string.Join()每次都获胜(我使用的测试用例相当有限/基本)。