C#嵌套中枚举的替代方法
看到这篇有趣的文章: 如何使类中有嵌套类成为可能 假设每个角色有不同的状态:作者、编辑 作者:经验丰富的精英 编辑:批准,偶尔 我如何访问该值,如下所示:C#嵌套中枚举的替代方法,c#,enums,static,c#-6.0,C#,Enums,Static,C# 6.0,看到这篇有趣的文章: 如何使类中有嵌套类成为可能 假设每个角色有不同的状态:作者、编辑 作者:经验丰富的精英 编辑:批准,偶尔 我如何访问该值,如下所示: Role.Author.experied.Value Role.Editor.Approved.Value 谢谢,我不明白这个问题。如果想要嵌套类,请使用嵌套类。从您链接到的文章的设计开始,您将获得: public class Role { public static class Author { publi
Role.Author.experied.Value
Role.Editor.Approved.Value
谢谢,我不明白这个问题。如果想要嵌套类,请使用嵌套类。从您链接到的文章的设计开始,您将获得:
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);
}
}
公共类角色
{
公共静态类作者
{
公共静态角色经验丰富的{get;}=新角色(0,“经验丰富的作者”);
公共静态角色Elite{get;}=新角色(1,“Elite作者”);
}
公共静态类编辑器
{
公共静态角色已批准{get;}=新角色(2,“已批准的编辑器”);
公共静态角色occasional{get;}=新角色(3,“occasioneditor”);
}
公共字符串名称{get;private set;}
公共int值{get;private set;}
私有角色(int val,字符串名称)
{
值=val;
名称=名称;
}
公共IEnumerable列表()
{
返回新[]{作者。经验丰富的,作者。精英,编辑。批准,编辑。偶然};
}
来自字符串的公共角色(字符串角色列表)
{
return List();
}
公共角色FromValue(int值)
{
return List().FirstOrDefault(r=>r.Value==Value);
}
}
为什么不想使用Enum?为了编写自定义逻辑并为特定业务案例启用嵌套。每个角色都应该包含状态集合,我看不到其他方法。您要求的是一个普通类,它具有两个类似Enum的属性。就这样吧,没有什么好的理由将角色类腐蚀成枚举以外的其他类型。Fwiw、枚举类型的存在使代码快速且内存高效。这不是。