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?
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With