2016-07-30 116 views
1

遇到了这个有趣的文章:替代在C#中枚举 - 嵌套

Alternative to enum by Ardalis

我怎样才能使人们有可能在类中已经嵌套类。

假设我们对每个角色都有不同的状态:作者,编辑。

作者:经验丰富,精英

编辑:批准,偶尔

我怎么能访问值:

Role.Author.Seasoned.Value

Role.Editor.Approved.Value

谢谢

+0

为什么你不想使用Enum? –

+0

为了编写自定义逻辑并为特定业务案例启用嵌套。 – Satyajit

+0

每个角色都应该包含状态的集合,我没有看到其他方式。 – Dusan

回答

3

我不明白这个问题。如果您想要嵌套类,请使用嵌套类。从您链接的文章的设计开始,您将得到:

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); 
    } 
}