如何在C#中将System.Array转换为object
我有一个COM函数,期望object[]
作为参数:
foo(object[] values)
我想传递一些enum
字段,所以我使用以下内容:
object[] fields = (object[])Enum.GetValues(typeof(SomeEnumType));
但是,当我尝试将fields
传递给foo(...)
即[ foo(fields)
]时出现错误:
“无法将类型为’SomeEnumType []’的对象强制转换为’system.Object []’。
谁能告诉我我做错了什么?
正如exception所说,你无法将SomeEnumType[]
转换为object[]
– 前者是一个数组,其中每个值都是SomeEnumType
值; 后者是一个数组,其中每个元素都是一个引用。
使用LINQ,您可以轻松地创建新arrays:
object[] fields = Enum.GetValues(typeof(SomeEnumType)) .Cast
这将基本上封装每个元素(每个枚举值)以创建IEnumerable
,然后从中创建一个数组。 它类似于Tilak的方法,但我更喜欢使用Cast
因为我实际上并不需要通用投影。
或者:
SomeEnumType[] values = (SomeEnumType[]) Enum.GetValues(typeof(SomeEnumType)); object[] fields = Array.ConvertAll(values, x => (object) x);
Enum.GetValues(typeof(SomeEnumType)).Cast
您需要转换正确的数组类型。 尝试这些方面的东西:
object[] fields = (object[])Enum.GetValues(typeof(SomeEnumType)).Cast
错误消息指出该函数期望一个类型为“object”的对象数组,并且您传入的类型为“SomeEnumType”,因此存在类型不匹配。