views:

1089

answers:

4

Lets say you have a:

List<string> los = new List<string>();

In this crazy functional world we live in these days which one of these would be best for creating one string by concatenating these:

String.Join(String.Empty, los.ToArray());

StringBuilder builder = new StringBuilder();
los.ForEach(s => builder.Append(s));

string disp = los.Aggregate<string>((a, b) => a + b);

or Plain old StringBuilder foreach

OR is there a better way?

+18  A: 

I would go with option A:

String.Join(String.Empty, los.ToArray());

My reasoning is because the Join method was written for that purpose. In fact if you look at Reflector, you'll see that unsafe code was used to really optimize it. The other two also WORK, but I think the Join function was written for this purpose, and I would guess, the most efficient. I could be wrong though...

BFree
GA! I didn't even see this option at first- read right past it.
Joel Coehoorn
I did some tests and they showed that this was about three times faster than the StringBuilder, but both of these were much better than the aggregate
Nathan Koop
3 times faster than the StringBuilder? Wow, I figured it would be faster, didn't realize just how much faster. It makes sense though, it's done in unsafe code using pointers, so..... makes sense.
BFree
+1  A: 

My vote is string.Join

No need for lambda evaluations and temporary functions to be created, fewer function calls, less stack pushing and popping.

Tom Ritter
+2  A: 

String.Join() is implemented quite fast, and as you already have a collection of the strings in question, is probably the best choice. Above all, it shouts "I'm joining a list of strings!" Always nice.

J Cooper
+4  A: 
string.Concat(los.ToArray());

If you just want to concatenate the strings then use string.Concat() instead of string.Join().

Pent Ploompuu