Jam*_*xon 6 c# linq lambda stringbuilder
我有一个String数组,我想通过LINQ添加到字符串生成器.
我基本上想说的是"对于这个数组中的每个项目,在这个StringBuilder中附加一行".
我可以使用foreach循环很容易地做到这一点但是下面的代码似乎没有做任何事情.我错过了什么?
stringArray.Select(x => stringBuilder.AppendLine(x));
Run Code Online (Sandbox Code Playgroud)
这工作的地方:
foreach(String item in stringArray)
{
stringBuilder.AppendLine(item);
}
Run Code Online (Sandbox Code Playgroud)
jas*_*son 18
如果您坚持以LINQy方式执行此操作:
StringBuilder builder = StringArray.Aggregate(
new StringBuilder(),
(sb, s) => sb.AppendLine(s)
);
Run Code Online (Sandbox Code Playgroud)
另外,正如卢克在另一篇文章的评论中指出的那样,你可以说
Array.ForEach(StringArray, s => stringBuilder.AppendLine(s));
Run Code Online (Sandbox Code Playgroud)
Select不起作用的原因是因为Select投影和创建IEnumerable投影.所以代码行
StringArray.Select(s => stringBuilder.AppendLine(s))
Run Code Online (Sandbox Code Playgroud)
不会迭代每次迭代的StringArray调用stringBuilder.AppendLine(s).相反,它创建了一个IEnumerable<StringBuilder>可以枚举的内容.
我想你可以说
var e = stringArray.Select(x => stringBuilder.AppendLine(x));
StringBuilder sb = e.Last();
Console.WriteLine(sb.ToString());
Run Code Online (Sandbox Code Playgroud)
但那真是太可怕了.
使用“ForEach”扩展方法而不是“Select”。
stringArray.ToList().ForEach(x => stringBuilder.AppendLine(x));
Run Code Online (Sandbox Code Playgroud)
或者
Array.ForEach(stringArray, x => stringBuilder.AppendLine(x));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12395 次 |
| 最近记录: |