c#和类中的嵌套枚举

c#和类中的嵌套枚举,c#,class,enums,C#,Class,Enums,我听说在C#中不可能嵌套enum。那么,如何将以下结构转换为类层次结构或其他内容。因此,我希望该类充当enum 您可以使用Hirrchy作为类结构,每个类都有自己的属性enum嵌套类和常量字段 class Cat1 { public const int Public = 1; public class Private { public const int Abc = 2; public const int Mno = 3;

我听说在C#中不可能嵌套
enum
。那么,如何将以下结构转换为类层次结构或其他内容。因此,我希望该类充当
enum


您可以使用Hirrchy作为类结构,每个类都有自己的属性enum

嵌套类和常量字段

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;
    }
}
那么你可以这样称呼它

Cat1.Publicpart.Xyz
或者如果你有私人账户

Cat1.Privatepart.Abc

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

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

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
}

到目前为止你试过什么?它有用吗?如果没有,它应该做什么?你是指枚举还是可枚举?上面的内容看起来更像是由可枚举对象而不是枚举对象建模的。这个问题很老,但我建议(在roslyn github项目上)在C的下一个版本中实现这一特性,值得注意的是,该变量只是一个
int
,因此可能从其他地方得到一个无效值。
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
}