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)
但是,当我尝试传递fields
给foo(...)
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)