gpt4 book ai didi

c# - 给定一个对象,它是一个枚举值数组,我如何在不知道枚举类型的情况下获得一个 Enum[]

转载 作者:太空狗 更新时间:2023-10-30 00:51:54 25 4
gpt4 key购买 nike

如何将包含某种枚举类型数组的对象类型变量转换为 Enum[] ?换句话说:

// Somewhere in the code we have: public enum MyEnum {This,That};
// Somewhere else in the code we have: public enum TheirEnum {What,Ever};
// In other parts of the code we have additional enum types

// Now, given:
object enumArrayOfSomeType=...; // Maybe it's of type MyEnum[] or TheirEnum[] or
// SomeOtherEnum[]

// I want to say
Enum[] someEnumArray=enumArrayOfSomeType as Enum[];

不幸的是,所提供的代码总是在 someEnumArray 中产生空值。

有办法吗?

更新:

我猜我期待着数组协方差的出现,但也许我期待的太多了(即,数组协方差变得疯狂)。

此外,感谢 Chris Sinclair 在对已接受答案的评论中指出,数组的协变适用于引用类型,而枚举肯定不是。 (参见:.NET Array Covariance rules in MSDN。)

最佳答案

我怀疑您必须创建一个新数组并转换每个元素,仅仅是因为 MyEnum[]不是 Enum[] .一个简单的 LINQ 查询可以做到这一点:

Enum[] someEnumArray = ((IEnumerable)enumArrayOfSomeType).Cast<Enum>().ToArray();

编辑:根据您的评论,如果您只想迭代一次并避免创建数组,您可以放弃 ToArray()调用并将其视为延迟 IEnumerable<Enum> :

IEnumerable<Enum> someEnumArray = ((IEnumerable)enumArrayOfSomeType).Cast<Enum>();

所以它基本上只会迭代元素并一次转换它们。

EDITx2:从编辑过的关于为什么数组协方差不生效的问题来看,这是因为它仅适用于引用类型,而枚举不适用。来自MSDN 12.5 Array covariance :

For any two reference-types A and B, if an implicit reference conversion (Section 6.1.4) or explicit reference conversion (Section 6.2.3) exists from A to B, then the same reference conversion also exists from the array type A[R] to the array type B[R]

关于c# - 给定一个对象,它是一个枚举值数组,我如何在不知道枚举类型的情况下获得一个 Enum[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24414142/

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