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

Pat*_*ard 16 .net c# enums casting c#-4.0

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

foo(object[] values)
Run Code Online (Sandbox Code Playgroud)

我想传递一些enum字段,所以我使用以下内容:

object[] fields = (object[])Enum.GetValues(typeof(SomeEnumType));
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试传递fieldsfoo(...)ie [ foo(fields)]时,我收到一个错误:

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

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

Jon*_*eet 24

正如例外所述,你无法将转换为a转换SomeEnumType[]object[]- 前者是一个数组,其中每个值都是一个SomeEnumType值; 后者是一个数组,其中每个元素都是一个引用.

使用LINQ,您可以轻松地创建阵列:

object[] fields = Enum.GetValues(typeof(SomeEnumType))
                      .Cast<object>()
                      .ToArray();
Run Code Online (Sandbox Code Playgroud)

这将基本上将每个元素(每个枚举值)框起来创建一个IEnumerable<object>,然后从中创建一个数组.它与Tilak的方法类似,但我更喜欢Cast在我不需要通用投影时使用.

或者:

SomeEnumType[] values = (SomeEnumType[]) Enum.GetValues(typeof(SomeEnumType));
object[] fields = Array.ConvertAll(values, x => (object) x);
Run Code Online (Sandbox Code Playgroud)