如何在C#中将System.Array转换为object []

时间:2012-05-21 06:06:44

标签: c# .net c#-4.0 casting enums

我有一个COM函数,期望object[]作为参数:

foo(object[] values)

我想将一些enum字段传递给它,因此我使用以下内容:

object[] fields = (object[])Enum.GetValues(typeof(SomeEnumType));

但是,当我尝试将fields传递给foo(...),即[foo(fields)]时,我收到错误消息:

  

“无法将类型为'SomeEnumType []'的对象强制转换为'system.Object []'。

谁能告诉我我做错了什么?

3 个答案:

答案 0 :(得分:24)

如异常所述,您无法将SomeEnumType[]转换为object[] - 前者是一个数组,其中每个值都是SomeEnumType值;后者是一个数组,其中每个元素都是一个参考。

使用LINQ,您可以轻松地创建 new 数组:

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

这基本上会将每个元素(每个枚举值)设置为IEnumerable<object>,然后从中创建一个数组。它类似于Tilak的方法,但当我实际上不需要通用投影时,我更喜欢使用Cast

可替换地:

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

答案 1 :(得分:4)

Enum.GetValues(typeof(SomeEnumType)).Cast<object>().ToArray()

答案 2 :(得分:2)

您需要转换正确的数组类型。尝试以下几点:

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

错误消息指出该函数期望一个类型为“object”的对象数组,并且您传入的类型为“SomeEnumType”,因此存在类型不匹配。