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)
风追烟花雨2024-08-18 05:28:17
stringArray.DoForAll(x => StringBuilder.AppendLine(x));
其中,DoForAll
是一个扩展方法:
public static class CommonExtensions
{
public static void DoForAll<T>(this IEnumerable<T> items, Action<T> action) where T: class
{
if (action == null)
throw new ArgumentNullException("action");
foreach (var item in items)
action(item);
}
}
~没有更多了~
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如果您坚持以 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.