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

标签 c# .net c#-4.0 casting enums

我有一个 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/

相关文章:

c# - 检查子元素之一是否为 null 且不抛出异常的最佳方法

c# - 仅显示任何日期尚未预订的空闲时段

c# - 如何使用 C# 从安全 token 中获取信息

c# - 参数化 Function app 的 settings.json 以进行发布

c++ - 使用 C++ AI 引擎和 ASP.NET C# 页面的纸牌游戏

c#-4.0 - C# 4.0 命名参数 - 调用非框架方法时是否应始终使用它们?

c# - 在方法签名中使用 new 关键字通常只是为了提高可读性吗?

c# - 难倒在 C# DateTime ToString() 格式化问题

c# - 为基子类创建了多少个实例和引用?

c# - 当我设置 IIS 池的 LoadUserProfile 时到底发生了什么?