从List 返回字符串的最优雅方式

什么是从列表返回字符串最优雅的方法ok,是的,我知道我可以做类似的事情

public string Convert(List something) { var s = new StringBuilder(); foreach(int i in something) s.AppendFormat("{0} ", i); return s.ToString(); } 

但我确定有一种方法可以用lambdas做到这一点我也尝试追加到一个字符串构建器但是这没有做什么预期

IMO,你原来的版本更好; LINQ很棒,但它不是每个问题的答案。 特别是, string.Join方法需要一个额外的数组(获得少量收益),而Aggregate方法使用大量的中间字符串。

也许让它成为一种扩展方法 – 并且失去Format东西:

 public static string Concatenate(this IEnumerable source, string delimiter) { var s= new StringBuilder(); bool first = true; foreach(T t in source) { if(first) { first = false; } else { s.Append(delimiter); } s.Append(t); } return s.ToString(); } 
 String result = String.Join(" ", list.Select(item => item.ToString()).ToArray()); 

要解决null问题,可以添加Where(item => item != null) ,使用条件运算符或null合并运算符。 但是,添加到表达式中的每个“修复”都会降低其可读性和优雅性。

使用string.Join:

 string.Join(" ", something.Select(i => i.ToString()).ToArray()) 

使用string.Join

 List data = ..; var result = string.Join(";", data); // (.NET 4.0 only) var result = string.Join(";", data.Select(x => x.ToString()).ToArray()); // (.NET 3.5) 

又一种扩展方法:

 public static class Extensions { public static string Join(this List list) { return string.Join(" ", list.Select(item => item.ToString()).ToArray()); } } 

用法:

 string s = new List {1, 2, 3}.Join(); 

利用StringBuilder和LINQ:

  public static string SpaceOut(this IEnumerable list) { if (list.Count()==)) return string.Empty; var res = new StringBuilder(); list.Take(list.Count() - 1).ToList().ForEach(i => res.Append(i.ToString() + " ")); res.Append(list.Last().ToString()); return res.ToString(); } 
 string result = list.Aggregate("", (str, i) => str + " " + i).TrimStart(' '); 

使用LINQ并累积:

 string res = list.Select(x => x.ToString()).Aggregate("", (a,b) => a + " " + b); 

并保存一个中间数组(但对于大型列表创建O(n)垃圾字符串)。