【问题标题】:nested enum in c# and classesc# 和类中的嵌套枚举
【发布时间】:2011-12-14 16:52:19
【问题描述】:

我听说 enum 的嵌套在 C# 中是不可能的。那么如何将以下结构转换为类层次结构或其他东西。所以我希望班级充当enum

【问题讨论】:

  • 到目前为止你尝试过什么?行得通吗?如果没有,它应该做什么?
  • 你是指枚举还是可枚举?上面看起来更像是由可枚举而不是枚举来建模的东西。
  • 这个问题已经很老了,但我提出了一个建议(在 roslyn github 项目上)在 C# 的下一个版本中实现这个功能github.com/dotnet/roslyn/issues/13192

标签: c# class enums


【解决方案1】:

你可以使用hirerchy作为类结构,每个类都有自己的枚举属性

【讨论】:

    【解决方案2】:

    嵌套类和常量字段

    class Cat1
    {
        public const int Public = 1;
        public class Private
        {
            public const int Abc = 2;
            public const int Mno = 3;
            public const int Pqr = 4;
        }
    }
    

    【讨论】:

    • 值得注意的是,该变量只是一个int,因此可能会从其他地方获得无效值。
    【解决方案3】:
    public class Cat1
    {
      public enum Publicpart
      {
         Xyz
      }
    
      private enum Privatepart
      {
         Abc, Mno, Pqr
      }
    }
    

    那么你可以这样称呼它

    Cat1.Publicpart.Xyz
    

    或者如果您有私人访问权限

    Cat1.Privatepart.Abc
    

    【讨论】:

      【解决方案4】:

      如果你想通过枚举解决这个问题,你应该重新考虑,因为第一个枚举类别对我来说代表某种“可见性”概念,而第二个类别仅对可见性“公共”的实例有效。

      用这样的方法解决你的问题怎么样:

      public enum Visibility
      {
          Public,
          Private
      }
      
      public abstract class VisibilityState
      {
          public Visibility Visibility { get; private set; }
      
          protected VisibilityState(Visibility visibility)
          {
              Visibility = visibility;
          }
      }
      
      public class PublicVisibilityState : VisibilityState
      {
          public PublicVisibilityState() : base(Visibility.Public) { }
      }
      
      public class PrivateVisibilityState : VisibilityState
      {
          public PrivateVisibilityState() : base(Visibility.Private) { }
          public OtherEnum OtherEnumState { get; set; }
      }
      
      public enum OtherEnum
      {
          Abc, Mno, Pqr
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-12
        • 2010-09-18
        • 2016-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多