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