1

如何在 c# 中将枚举数组转换为通用枚举数组。

要清楚:

鉴于:

public enum PrimaryColor
{
    red = 0,
    blue = 1,
    yellow = 3
}

public enum SecondaryColor
{
    green = 0,
    purple = 1,
    orange = 2
}

我想做这样的事情:

public class MyClass
{
    public static void Main()
    {
        PrimaryColor[] pca = {PrimaryColor.blue, PrimaryColor.yellow};
        SecondaryColor[] sca = {SecondaryColor.purple, SecondaryColor.orange};

        Enum[] enumArray = pca;
    }

}

这会导致以下编译器错误:

Cannot implicitly convert type 'PrimaryColor[]' to 'System.Enum[]'

我可以使用 linq 或更多迭代过程,但我想知道是否有更好的演员可以代替。

4

2 回答 2

3

你只能迭代地做

Enum[] enumArray = Array.ConvertAll(pca, item => (Enum)item);

或者(效率较低,但 Linq!)

Enum[] enumArray = pca.Cast<Enum>().ToArray();

为什么不能简单地转换数组?因为在 C# 中,协方差仅对引用类型的数组启用(枚举是值类型)。因此,通过课程,Foo您可以:

Foo[] foos = new Foo[10];
object[] array = (object[])foos;
于 2013-02-01T16:15:42.717 回答
0
PrimaryColor[] pca = { PrimaryColor.blue, PrimaryColor.yellow };
SecondaryColor[] sca = { SecondaryColor.purple, SecondaryColor.orange };

Enum[] enumArray = pca.Select(q => q as Enum).ToArray();

或者;

for (int i=0; i<pca.Count();i++)
{
    enumArray[i] = pca[i];                
}
于 2013-02-01T16:18:54.727 回答