将多个枚举组合到主枚举列表中

时间:2012-12-05 23:56:35

标签: c# enums combinations

是否可以将多个枚举组合在一起?以下是我希望看到的代码示例:

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
}

它们的顺序无关紧要,或者它们的支持号是什么,我只是希望能够将它们组合起来。

对于上下文,这是因为我正在处理的程序的多个类将具有与它们所做的相关联的枚举。我的主程序将读取每个支持类中可用的所有枚举,并列出可用命令的可用枚举的主列表(枚举用于)。

编辑: 这些枚举的原因是因为我的主程序正在读取要在特定时间执行的命令列表,所以我想读入文件,看看其中的命令是否与我的一个枚举相关联,如果是是,将其放入要执行的命令列表中。

4 个答案:

答案 0 :(得分:6)

  

这些枚举的原因是因为我的主程序正在读取要在特定时间执行的命令列表,所以我想读入该文件,看看其中的命令是否与我的一个枚举相关联,如果是,请将其放入要执行的命令列表中。

这似乎你不想要三种不同的enum类型,你想要一种类型(你称之为“主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;
    }
}

此外,you should use a singular name for enum types(除非它是一个标志enum)。

答案 1 :(得分:6)

不确定我是否准确理解。但是你可以制作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>。在任何情况下,因为您将PrimaryColorSecondaryColor分配给类型(即System.Enum),您会获得boxing,但这只是技术细节(可能)。

答案 2 :(得分:1)

保持简单,只使用隐式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
    }
}

答案 3 :(得分:0)

您可以从完整的组中推导出子组。
一个例子:

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
}