Linq 是否可以使用lambda函数而不是foreach来构造stringbuilder?
可能重复:Linq 是否可以使用lambda函数而不是foreach来构造stringbuilder?,linq,functional-programming,lambda,Linq,Functional Programming,Lambda,可能重复: 请原谅我的函数式编程没有必要,但甚至可以使用lamba函数将数组中的每个字符串附加到StringBuilder对象吗 是否可以打开此代码: // string[] errors = ... StringBuilder sb = new StringBuilder("<ul>"); foreach (var error in errors) { sb.AppendFormat("<li>{0}</li>", error); } sb.AppendLin
请原谅我的函数式编程没有必要,但甚至可以使用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();
//字符串[]错误=。。。
StringBuilder sb=新的StringBuilder(“”);
foreach(错误中的var错误)
{
sb.AppendFormat(“- {0}
”,错误);
}
sb.AppendLine(“我还没有测试过它,但是像下面这样的东西应该可以工作
return errors.Aggregate(new StringBuilder("<ul>"), (sb,s) => sb.AppendFormat("<li>{0}</li>", s))
.Append("</ul>");
.ToString();
返回错误.Aggregate(新的StringBuilder(“”)(sb,s)=>sb.AppendFormat(“- {0}
”,s))
.附加(“
”);
.ToString();
Aggregate是一种IEnumerable扩展方法……但我可能对agruments的顺序有误。就我个人而言,我认为这不会给你带来太多好处,因为它可读性较差,而且在内部执行foreach
。我还没有测试过它,但类似于以下的东西应该可以工作
return errors.Aggregate(new StringBuilder("<ul>"), (sb,s) => sb.AppendFormat("<li>{0}</li>", s))
.Append("</ul>");
.ToString();
返回错误.Aggregate(新的StringBuilder(“”)(sb,s)=>sb.AppendFormat(“- {0}
”,s))
.附加(“
”);
.ToString();
Aggregate是一种IEnumerable扩展方法……但我可能对agruments的顺序有误。就我个人而言,我认为这不会给您带来太多好处,因为它可读性较差,并且在内部执行了一个foreach
。重复我认为这应该可以工作,除了lambda函数参数应该是“(sb,s)=>”(第一个参数是current state,它是字符串生成器,第二个参数是“errors”集合中的一个单错误字符串。@托马斯:谢谢!这正是我想要的。我已经更正了这个示例。RWFP非常好…太棒了!我同意它的可读性较差,比任何东西都奇怪。谢谢!关于可读性-我认为这是一个部分函数应用程序可以使代码变得更好。想象一下,您可以只编写:Aggregate(…,StringBuilder.AppendFormat({0} )。(虽然这在C#中可能无法很好地工作)我认为这应该可以工作,除了lambda函数参数应该是“(sb,s)=>”(第一个参数是current state,它是字符串生成器,第二个参数是“errors”集合中的一个单错误字符串。@托马斯:谢谢!这正是我想要的。我已经更正了这个示例。RWFP非常好…太棒了!我同意它的可读性较差,比任何东西都奇怪。谢谢!关于可读性-我认为这是一个部分函数应用程序可以使代码变得更好。想象一下,您可以只编写:聚合(…,StringBuilder.AppendFormat(“ {0} ”)(尽管这可能在C#中无法很好地工作)