我有一个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) );
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());
但那真是太可怕了.