如何在 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。对象[]'。

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

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

正如例外所说,您无法将 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"的对象数组之一,因此存在类型不匹配。