我有一个包含大量项目的现有枚举.
我也有现有的代码用这个枚举做某些事情.
我现在想要一种只查看子集枚举成员的方法.我正在寻找的是一种将我的枚举分成小组的方法.我需要保留每个成员的(int)值,并且我需要保留在需要时查看所有枚举成员的能力.
我唯一能想到的就是为每个子枚举创建一个新的枚举,它只包含我想要的项目使用相同的名称和值.
这有效但违反了整个无重复原则.
我不希望任何人有更好的选择,但我想我会问,以防有人有一个奇特的伎俩给我看.
谢谢,一如既往.
我会用这个(至少在VB.NET中工作)
enum MySuperEnumGroup { Group1Item1, Group1Item2, Group1Item3, Group2Item1, Group2Item2, Group2Item3, Group3Item1, Group3Item2, Group3Item3, } enum MySubEnumGroup { Group2Item1 = MySuperEnumGroup.Group2Item1 Group3Item1 = MySuperEnumGroup.Group3Item1 Group3Item3 = MySuperEnumGroup.Group3Item3 }
然后在需要时做某种CType.
您可以使用枚举定义值,但然后通过静态类中的常量引用它们,这样您的开发人员就不会被大型枚举所覆盖.你可以有:
enum MySuperEnumGroup { Group1Item1, Group1Item2, Group1Item3, Group2Item1, Group2Item2, Group2Item3, Group3Item1, Group3Item2, Group3Item3, } static class MySuperEnumGroup_Group1 { public const MySuperEnumGroup Item1 = MySuperEnumGroup.Group1Item1; public const MySuperEnumGroup Item2 = MySuperEnumGroup.Group1Item2; public const MySuperEnumGroup Item3 = MySuperEnumGroup.Group1Item3; } static class MySuperEnumGroup_Group2 { public const MySuperEnumGroup Item1 = MySuperEnumGroup.Group2Item1; public const MySuperEnumGroup Item2 = MySuperEnumGroup.Group2Item2; public const MySuperEnumGroup Item3 = MySuperEnumGroup.Group2Item3; } //etc.
如果枚举没有显式值,请给它们一个并使用标志定义“分组”:
[Flags] enum MySuperEnumGroup { Group1 = 1 << 0, Group2 = 1 << 1, Group3 = 1 << 2, Group1Item1 = 1 << 10 | Group1, Group1Item2 = 1 << 11 | Group1, Group1Item3 = 1 << 12 | Group1, Group2Item1 = 1 << 13 | Group2, Group2Item2 = 1 << 14 | Group2, Group2Item3 = 1 << 15 | Group2, Group3Item1 = 1 << 16 | Group3, Group3Item2 = 1 << 17 | Group3, Group3Item3 = 1 << 18 | Group3, }
然后,您可以使用Enum.GetValues
和HasFlag
获取给定“分组”的值:
var group1 = Enum.GetValues(typeof(MySuperEnumGroup)) .Cast() .Where(value => value.HasFlag(MySuperEnumGroup.Group1)) .ToArray();