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

rou*_*sis 12 c#

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

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

    return s.ToString();
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ell 24

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

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

public static string Concatenate<T>(this IEnumerable<T> 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();
}
Run Code Online (Sandbox Code Playgroud)

  • 这很有趣; 如果.NET提供了一个名为ListToString的内置函数,并且有人发布了答案,"只需使用ListToString",每个人都会称之为优雅.但是如果有人编写了一个在内部执行完全相同操作的函数,只需看到代码,人们就会称之为笨重.LINQ可能看起来很简洁,但这并不意味着没有足够的内容. (6认同)
  • @Dan - 很好.事实上,LINQ的大部分内容都是*隐藏复杂性 - 当然,复杂性仍然存在;-p. (2认同)

Dan*_*ner 20

String result = String.Join(" ", list.Select(item => item.ToString()).ToArray());
Run Code Online (Sandbox Code Playgroud)

要解决List<int>问题,可以添加一个List<int?>,使用条件运算符或空合并运算符.但是,添加到表达式中的每个"修复"都会降低其可读性和优雅性.

  • 对不起,这个优雅怎么样?仅仅因为它是新的并且Linq'y并不意味着它自动优雅.顺便说一句,我喜欢使用Linq,但并不是因为一切. (4认同)

Chr*_*fer 11

使用string.Join:

string.Join(" ", something.Select(i => i.ToString()).ToArray())
Run Code Online (Sandbox Code Playgroud)


Ste*_*ary 7

用途string.Join:

List<int> data = ..;
var result = string.Join(";", data); // (.NET 4.0 only)
var result = string.Join(";", data.Select(x => x.ToString()).ToArray()); // (.NET 3.5)
Run Code Online (Sandbox Code Playgroud)