2011-10-25 13 views
7

Ho sentito che l'annidamento di enum non è possibile in C#. Quindi come può convertire la seguente struttura in una gerarchia di classi o qualcos'altro. Quindi voglio la classe di agire come un enumenumerato nid in C# e classi

enter image description here

+1

cosa hai provato finora? funziona ? se no, cosa dovrebbe fare? – Alex

+1

Intendi un enum o un enumerable? Quanto sopra sembra più qualcosa che sarebbe modellato da un enumerabile che da un enum. –

+0

Questa domanda è vecchia, ma ho fatto un suggerimento (su roslyn github project) per implementare questa funzionalità nelle prossime versioni di C# http://github.com/dotnet/roslyn/issues/13192 – lmcarreiro

risposta

4

classi annidate e campi const

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; 
    } 
} 
+4

E mentre ci sei, segna le classi statiche. – ver

+1

Vale la pena notare che la variabile sarebbe solo un 'int', quindi potrebbe ottenere un valore non valido da qualche altra parte. –

1

è possibile utilizzare il hirerchy come struttura di classe, che ogni classe ha una proprietà di un proprio della enum

2
public class Cat1 
{ 
    public enum Publicpart 
    { 
    Xyz 
    } 

    private enum Privatepart 
    { 
    Abc, Mno, Pqr 
    } 
} 

allora si può chiamare in questo modo

Cat1.Publicpart.Xyz 

o se si dispone di accesso privato

Cat1.Privatepart.Abc 
1

Si dovrebbe ripensare se si vuole risolvere questi problemi attraverso le enumerazioni perché la prima categoria enum rappresenta per me una sorta di concetto di "visibilità", mentre la seconda categoria è valido solo per istanze con visibilità "pubblica".

Che dire di risolvere il tuo problema con qualcosa di simile:

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 
}