LINQ 从 String[] 附加到 StringBuilder
我有一个字符串数组,我想通过 LINQ 将其添加到字符串生成器中。
我基本上想说的是“对于这个数组中的每个项目,向这个 StringBuilder 添加一行”。
我可以使用 foreach 循环轻松地完成此操作,但是以下代码似乎没有执行任何操作。我缺少什么?
stringArray.Select(x => stringBuilder.AppendLine(x));
这在哪里有效:
foreach(String item in stringArray)
{
stringBuilder.AppendLine(item);
}
I've got a String array that I'm wanting to add to a string builder by way of LINQ.
What I'm basically trying to say is "For each item in this array, append a line to this StringBuilder".
I can do this quite easily using a foreach loop however the following code doesn't seem to do anything. What am I missing?
stringArray.Select(x => stringBuilder.AppendLine(x));
Where as this works:
foreach(String item in stringArray)
{
stringBuilder.AppendLine(item);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您坚持以 LINQy 方式执行此操作:
或者,正如 Luke 在另一篇文章的评论中指出的那样,您可以说
Select
不起作用的原因是因为Select
用于投影并创建投影的IEnumerable
。因此,该代码行不会在每次迭代时迭代调用
stringBuilder.AppendLine(s)
的StringArray
。相反,它创建一个可以枚举的IEnumerable
。我想你可能会说,
但这真的很可怕。
If you insist on doing it in a LINQy way:
Alternatively, as Luke pointed out in a comment on another post, you could say
The reason that
Select
does not work is becauseSelect
is for projecting and creating anIEnumerable
of the projection. So the line of codedoes not iterate over the
StringArray
callingstringBuilder.AppendLine(s)
on each iteration. Rather, it creates anIEnumerable<StringBuilder>
that can be enumerated over.I suppose that you could say
but that is really hideous.
使用“ForEach”扩展方法而不是“Select”。
或者
Use the "ForEach" extension method instead of "Select".
or
如果您使用 .NET core,那么这将起作用:
虽然它没有利用 LINQ,但它确实可以在一行中完成它,而无需添加任何额外的代码。
If you're using .NET core then this will work:
Although it's not leveraging LINQ, but it does get it done in one line without adding any extra code.
其中,
DoForAll
是一个扩展方法:Where,
DoForAll
is an extension method: