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 に答える