是否可以使用lambda函数而不是foreach构造一个stringbuilder?

时间:2010-02-02 19:09:47

标签: linq functional-programming lambda

  

可能重复:
  LINQ to append to a StringBuilder from a String[]

原谅我的函数编程noobiness,但是甚至可以使用lamba函数将数组中的每个字符串追加到StringBuilder对象中吗?

是否可以改变此代码:


// string[] errors = ...
StringBuilder sb = new StringBuilder("<ul>");

foreach (var error in errors)
{
    sb.AppendFormat("<li>{0}</li>", error);
}

sb.AppendLine("</ul");
return sb.ToString();


这样的事情:


// string[] errors = ...
StringBuilder sb = new StringBuilder("<ul>");

//I know this isn't right, I don't care about a return value
errors.All(s => sb.AppendFormat("<li>{0}</li>", s));

sb.AppendLine("</ul");
return sb.ToString();


感谢您的任何启发!

1 个答案:

答案 0 :(得分:1)

我还没有测试过,但是下面这样的东西应该有用......

return errors.Aggregate(new StringBuilder("<ul>"), (sb,s) => sb.AppendFormat("<li>{0}</li>", s))
             .Append("</ul>");
             .ToString();

Aggregate是一个IEnumerable扩展方法......但是我可能会对agruments的顺序错误。就个人而言,我认为这不会给你带来太大的影响,因为它不太可读,而且无论如何都在内部进行foreach