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