当前位置:  开发笔记 > 编程语言 > 正文

C#中的枚举子集或子组

如何解决《C#中的枚举子集或子组》经验,为你挑选了3个好方法。

我有一个包含大量项目的现有枚举.

我也有现有的代码用这个枚举做某些事情.

我现在想要一种只查看子集枚举成员的方法.我正在寻找的是一种将我的枚举分成小组的方法.我需要保留每个成员的(int)值,并且我需要保留在需要时查看所有枚举成员的能力.

我唯一能想到的就是为每个子枚举创建一个新的枚举,它只包含我想要的项目使用相同的名称和值.

这有效但违反了整个无重复原则.

我不希望任何人有更好的选择,但我想我会问,以防有人有一个奇特的伎俩给我看.

谢谢,一如既往.



1> 小智..:

我会用这个(至少在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.



2> Jeff Yates..:

您可以使用枚举定义值,但然后通过静态类中的常量引用它们,这样您的开发人员就不会被大型枚举所覆盖.你可以有:

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.



3> Mathieu Guin..:

如果枚举没有显式值,请给它们一个并使用标志定义“分组”:

[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.GetValuesHasFlag获取给定“分组”的值:

var group1 = Enum.GetValues(typeof(MySuperEnumGroup))
                 .Cast()
                 .Where(value => value.HasFlag(MySuperEnumGroup.Group1))
                 .ToArray();

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有