2016-07-30 30 views
1

über diesen interessanten Artikel kam:Alternative in C# ENUM - verschachtelt

Alternative to enum by Ardalis

Wie kann ich es möglich machen, innerhalb der Klasse Klassen haben verschachtelt.

Angenommen, wir haben unterschiedliche Status für jede Rolle: Autor, Editor.

Autor: Reifer, Elite

Editor: Genehmigt, Occassional

Wie kann ich den Wert, wie:

Role.Author.Seasoned.Value

Role.Editor.Approved.Value

Danke

+0

Warum möchten Sie Enum nicht verwenden? –

+0

Um benutzerdefinierte Logik zu schreiben und die Verschachtelung für bestimmte Geschäftsfälle zu aktivieren. – Satyajit

+0

Jede Rolle sollte eine Sammlung von Status enthalten, ich sehe nicht anders herum. – Dusan

Antwort

3

Ich verstehe die Frage nicht. Wenn Sie geschachtelte Klassen verwenden möchten, verwenden Sie geschachtelte Klassen. Beginnend mit dem Design des Artikels, mit dem Sie verlinkt haben, erhalten Sie:

public class Role 
{ 
    public static class Author 
    { 
     public static Role Seasoned {get;} = new Role(0, "Seasoned author"); 
     public static Role Elite {get;} = new Role(1, "Elite author"); 
    } 

    public static class Editor 
    { 
     public static Role Approved {get;} = new Role(2, "Approved editor"); 
     public static Role Occassional {get;} = new Role(3, "Occassional editor"); 
    } 

    public string Name { get; private set; } 
    public int Value { get; private set; } 

    private Role(int val, string name) 
    { 
     Value = val; 
     Name = name; 
    } 

    public IEnumerable<Role> List() 
    { 
     return new[]{Author.Seasoned,Author.Elite,Editor.Approved,Editor.Occassional}; 
    } 

    public Role FromString(string roleString) 
    { 
     return List().FirstOrDefault(r => String.Equals(r.Name, roleString, StringComparison.OrdinalIgnoreCase)); 
    } 

    public Role FromValue(int value) 
    { 
     return List().FirstOrDefault(r => r.Value == value); 
    } 
}