将枚举数组转换为枚举的通用数组

时间:2013-02-01 16:13:20

标签: c# arrays enums

如何将枚举数组转换为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或更多的迭代过程,但我想知道是否有更好的演员我可以使用。

2 个答案:

答案 0 :(得分:3)

你只能迭代地做到这一点

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

或者(效率不高但Linq!)

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

为什么你不能简单地投射数组?因为在C#covariance中只启用了引用类型的数组(枚举是值类型)。因此,使用课程Foo,您可以:

Foo[] foos = new Foo[10];
object[] array = (object[])foos;

答案 1 :(得分: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];                
}
相关问题