如何在 C# 中从 System.Array 转换为 object[]
本文关键字:转换 object Array System 中从 | 更新日期: 2023-09-27 18:34:41
>我有一个 COM 函数,它期望object[]
作为参数:
foo(object[] values)
我想将一些enum
字段传递给它,所以我使用以下字段:
object[] fields = (object[])Enum.GetValues(typeof(SomeEnumType));
但是,当我尝试将fields
传递给foo(...)
即 [ foo(fields)
] 时,我收到一个错误:
"无法将类型为'SomeEnumType[]'的对象强制转换为类型'system。对象[]'。
谁能告诉我我做错了什么?
正如例外所说,您无法将 cast SomeEnumType[]
转换为object[]
- 前者是一个数组,其中每个值都是一个SomeEnumType
值; 后者是一个数组,其中每个元素都是一个引用。
使用 LINQ,您可以非常轻松地创建新数组:
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);
Enum.GetValues(typeof(SomeEnumType)).Cast<object>().ToArray()
您需要强制转换正确的数组类型。尝试以下操作:
object[] fields = (object[])Enum.GetValues(typeof(SomeEnumType)).Cast<object>().ToArray();
错误消息指出该函数需要类型为"object"的对象数组,而您正在传入类型为"SomeEnumType"的对象数组之一,因此存在类型不匹配。