21

複数の列挙型を組み合わせることができますか?以下は私が見たいもののコードサンプルです:

enum PrimaryColors
{
   Red,
   Yellow,
   Blue
}

enum SecondaryColors
{
   Orange,
   Green,
   Purple
}

//Combine them into a new enum somehow to result in:
enum AllColors
{
   Red,
   Orange,
   Yellow,
   Green,
   Blue,
   Purple
}

それらがどのような順序であるか、またはそれらのバッキング番号が何であるかは関係ありません。私はそれらを組み合わせることができるようにしたいと思っています。

コンテキストとしては、これは、私が取り組んでいるプログラムの複数のクラスが、それらが実行することに関連付けられた列挙型を持つようにするためです。私のメインプログラムは、各サポートクラスから利用可能なすべての列挙型を読み取り、利用可能なコマンドの利用可能な列挙型のマスターリストを作成します(列挙型はのためのものです)。

編集:これらの列挙型の理由は、私のメインプログラムが特定の時間に実行するコマンドのリストを読み込んでいるためです。そのため、ファイルを読み込んで、その中のコマンドが私の列挙型の1つに関連付けられているかどうかを確認します。そうである場合は、実行するコマンドのリストに入れます。

4

4 に答える 4

8

正確に理解できません。List<>ただし、次のようにすべての値を作成できます。

var allColors = new List<Enum>();

allColors.AddRange(Enum.GetValues(typeof(PrimaryColors)).Cast<Enum>());
allColors.AddRange(Enum.GetValues(typeof(SecondaryColors)).Cast<Enum>());

代わりにList<Enum>を使用することもできますHashSet<Enum>。いずれにせよ、PrimaryColorまたはSecondaryColorクラスタイプ(つまりSystem.Enum)に割り当てるため、ボクシングが表示されますが、これは技術的な詳細にすぎません(おそらく)。

于 2012-12-06T00:16:00.040 に答える
7

これらの列挙型の理由は、私のメインプログラムが特定の時間に実行するコマンドのリストを読み込んでいるためです。そのため、ファイルを読み込んで、その中のコマンドが私の列挙型の1つに関連付けられているかどうかを確認します。つまり、実行するコマンドのリストに入れます。

これは、3つの異なるenumタイプが必要ではなく、1つのタイプ(「マスターenum」と呼ばれるもの)に加えて、特定の値がどのサブ列挙型に属するかを決定する方法が必要なようです。これを行うには、マスター列挙型からの値のコレクション、またはを使用できますswitch

例えば:

enum Color
{
   Red,
   Orange,
   Yellow,
   Green,
   Blue,
   Purple
}

bool IsPrimaryColor(Color color)
{
    switch (color)
    {
    case Color.Red:
    case Color.Yellow:
    case Color.Blue:
        return true;
    default:
        return false;
    }
}

また、型には単一の名前を使用する必要がありenumます(フラグでない限りenum)。

于 2012-12-06T00:14:04.803 に答える
2

シンプルに保ち、暗黙のint変換を使用するか、次のSystem.Enum.Parse()関数を使用します。

enum PrimaryColors
{        
    Red = 0,
    Yellow = 2,
    Blue = 4
}

enum SecondaryColors
{
    Orange = 1,
    Green = 3,
    Purple = 5
}

//Combine them into a new enum somehow to result in:
enum AllColors
{
    Red = 0,
    Orange,
    Yellow,
    Green,
    Blue,
    Purple
}

class Program
{
    static AllColors ParseColor(Enum color)
    {
        return ParseColor(color.ToString());
    }
    static AllColors ParseColor(string color)
    {
        return (AllColors)Enum.Parse(typeof(AllColors), color);
    }
    static void Main(string[] args)
    {
        PrimaryColors color1=PrimaryColors.Red;
        AllColors result=(AllColors)color1;
        // AllColors.Red

        SecondaryColors color2=SecondaryColors.Green;
        AllColors other=(AllColors)color2; 
        // AllColors.Green

        AllColors final=ParseColor(PrimaryColors.Yellow);
        // AllColors.Yellow
    }
}
于 2012-12-06T00:26:52.920 に答える
1

完全なグループからサブグループを派生させることができます。
例:

enum AllColors 
{
   Red,
   Orange,
   Yellow,
   Green,
   Blue,
   Purple
}

enum PrimaryColors
{
   Red = AllColors.Red,
   Yellow = AllColors.Yellow,
   Blue = AllColors.Blue
}

enum SecondaryColors
{
   Orange = AllColors.Orange,
   Green = AllColors.Green,
   Purple = AllColors.Purple
}
于 2021-03-24T03:22:58.857 に答える