I was investigating String.Concat : (Reflector)

very strange :
the have the values array ,
they creating a NEW ARRAY for which later they send him to ConcatArray.
Question :
Why they created a new array ? they had values from the first place...
edit
code :
public static string Concat(params string[] values)
{
if (values == null)
{
throw new ArgumentNullException("values");
}
int totalLength = 0;
string[] strArray = new string[values.Length];
for (int i = 0; i < values.Length; i++)
{
string str = values[i];
strArray[i] = (str == null) ? Empty : str;
totalLength += strArray[i].Length;
if (totalLength < 0)
{
throw new OutOfMemoryException();
}
}
return ConcatArray(strArray, totalLength);
}
totalLengthcould ever be less than zero. What silly thing am I overlooking?Concat? I've been trying to figure out how to view the code inside built in methods, but all I've found is that I need to use cecil.