简体   繁体   中英

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

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(...) ie [ 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?

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);
Enum.GetValues(typeof(SomeEnumType)).Cast<object>().ToArray()

You need to cast the proper array type. Try something along these lines:

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

The error message is stating that the function is expecting an object array of type "object" and you're passing in one of type "SomeEnumType", so there is a type mismatch.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM