How do I convert from System.Array to object[] in C#

.net, c#, c#-4.0, casting, enums

Solution

As the exception says, you can't convert cast a `SomeEnumType[]` to `object[]` - the former is an array where each value is a `SomeEnumType` value; the latter is an array where each element is a reference.

With LINQ you can create a new array easily enough:

object[] fields = Enum.GetValues(typeof(SomeEnumType))
                      .Cast<object>()
                      .ToArray();

This will basically box each element (each enum value) to create an `IEnumerable<object>`, then create an array from that. It's similar to Tilak's approach, but I prefer to use `Cast` when I don't actually need a general-purpose projection.

Alternatively:

SomeEnumType[] values = (SomeEnumType[]) Enum.GetValues(typeof(SomeEnumType));
object[] fields = Array.ConvertAll(values, x => (object) x);

Problem

I have a COM function that expects `object[]` as a parameter: ``` foo(object[] values) ``` I want to pass some `enum` fields to it so I use the following: ``` object[] fields = (object[])Enum.GetValues(typeof(SomeEnumType)); ``` However, when I try to pass `fields` to `foo(...)` i.e. [`foo(fields)`] I get an error: "Unable to cast object of type `SomeEnumType[]' to type 'system.Object[]'. Can anyone tell me what I'm doing wrong?

Original source