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);
}
If you insist on doing it in a LINQy way:
StringBuilder builder = StringArray.Aggregate(
new StringBuilder(),
(sb, s) => sb.AppendLine(s)
);
Alternatively, as Luke pointed out in a comment on another post, you could say
Array.ForEach(StringArray, s => stringBuilder.AppendLine(s));
The reason that Select
does not work is because Select
is for projecting and creating an IEnumerable
of the projection. So the line of code
StringArray.Select(s => stringBuilder.AppendLine(s))
does not iterate over the StringArray
calling stringBuilder.AppendLine(s)
on each iteration. Rather, it creates an IEnumerable<StringBuilder>
that can be enumerated over.
I suppose that you could say
var e = stringArray.Select(x => stringBuilder.AppendLine(x));
StringBuilder sb = e.Last();
Console.WriteLine(sb.ToString());
but that is really hideous.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With