c# – LINQ从String []追加到StringBuilder

我有一个String数组,我想通过LINQ添加到字符串生成器.

我基本上想说的是“对于这个数组中的每个项目,在这个StringBuilder中附加一行”.

我可以使用foreach循环很容易地做到这一点但是下面的代码似乎没有做任何事情.我错过了什么?

stringArray.Select(x => stringBuilder.AppendLine(x));

这工作的地方:

foreach(String item in stringArray)
{
  stringBuilder.AppendLine(item);
}

解决方法

如果您坚持以LINQy方式执行此操作:
StringBuilder builder = StringArray.Aggregate(
                            new StringBuilder(),(sb,s) => sb.AppendLine(s)
                        );

或者,正如Luke在另一篇文章评论中指出的那样,你可以说

Array.ForEach(StringArray,s => stringBuilder.AppendLine(s));

Select不起作用的原因是Select用于投影和创建投影的IEnumerable.所以代码

StringArray.Select(s => stringBuilder.AppendLine(s))

不会在每次迭代时迭代调用stringBuilder.AppendLine的StringArray.相反,它创建了一个IEnumerable< StringBuilder>可以列举的.

我想你可以说

var e = stringArray.Select(x => stringBuilder.AppendLine(x));
StringBuilder sb = e.Last();
Console.WriteLine(sb.ToString());

但那真是太可怕了.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...