object to string array

swcraft picture swcraft · May 24, 2012 · Viewed 96.3k times · Source

I am trying to convert an object (is declared here as 'obj': object is array, primitive) to a string array.

object can be anything uint[], int16[], etc.

I have been trying to use

string[] str = Array.ConvertAll<object, string>((object[])obj, Convert.ToString);

The problem occurs when I try to cast the unknown type object into object[]. I have been getting casting error.

One attempt I made, which failed, was using

object[] arr = (object[])obj;

or

IEnumerable<object> list = obj as IEnumerable<object>
object[] arr = (object[])list;

I saw postings regarding value type and reference type issue on casting.

Would there be a simple code that can handle casting to object[] regardless of type of object, as long as it is an array ? I am trying to avoid manual handling of every possible type casting.

thanks in advance

Answer

Jon Skeet picture Jon Skeet · May 24, 2012

You can use the fact that every array implements IEnumerable:

string[] arr = ((IEnumerable)obj).Cast<object>()
                                 .Select(x => x.ToString())
                                 .ToArray();

This will box primitives appropriately, before converting them to strings.

The reason the cast fails is that although arrays of reference types are covariant, arrays of value types are not:

object[] x = new string[10]; // Fine
object[] y = new int[10]; // Fails

Casting to just IEnumerable will work though. Heck, you could cast to Array if you wanted.