How can I join int[] to a character-separated string in .NET?
var ints = new int[] {1, 2, 3, 4, 5};
var result = string.Join(",", ints.Select(x => x.ToString()).ToArray());
Console.WriteLine(result); // prints "1,2,3,4,5"
As of (at least) .NET 4.5,
var result = string.Join(",", ints.Select(x => x.ToString()).ToArray());
is equivalent to:
var result = string.Join(",", ints);
I see several solutions advertise usage of StringBuilder. Someone complains that the Join method should take an IEnumerable argument.
I'm going to disappoint you :) String.Join requires an array for a single reason - performance. The Join method needs to know the size of the data to effectively preallocate the necessary amount of memory.
Here is a part of the internal implementation of String.Join method:
// length computed from length of items in input array and length of separator
string str = FastAllocateString(length);
fixed (char* chRef = &str.m_firstChar) // note than we use direct memory access here
{
UnSafeCharBuffer buffer = new UnSafeCharBuffer(chRef, length);
buffer.AppendString(value[startIndex]);
for (int j = startIndex + 1; j <= num2; j++)
{
buffer.AppendString(separator);
buffer.AppendString(value[j]);
}
}
Although the OP specified .NET 3.5, people wanting to do this in .NET 2.0 with C# 2.0 can do this:
string.Join(",", Array.ConvertAll<int, String>(ints, Convert.ToString));
I find there are a number of other cases where the use of the Convert.xxx functions is a neater alternative to a lambda, although in C# 3.0 the lambda might help the type-inferencing.
A fairly compact C# 3.0 version which works with .NET 2.0 is this:
string.Join(",", Array.ConvertAll(ints, item => item.ToString()))