gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:43:20 26 4
gpt4 key购买 nike

我有一个 COM 函数需要 object[] 作为参数:

foo(object[] values)

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

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

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

"Unable to cast object of type `SomeEnumType[]' to type 'system.Object[]'.

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

最佳答案

如异常所述,您不能转换为 SomeEnumType[]object[] - 前者是一个数组,其中每个值都是一个 SomeEnumType值(value);后者是一个数组,其中每个元素都是一个引用。

使用 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);

关于c# - 如何在 C# 中从 System.Array 转换为 object[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10680210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com