将一个枚举器列表的不同值显示到菜单列表的不同子菜单中

时间:2015-05-15 14:20:11

标签: c# .net

我有一个枚举如下[它只是原型]

public enum class Alphabets
    {
        None=0,
        A, E, I, O, U,
        B, C, D, F, G,
        Noun, Adj, Verb,            
        NoSign
    };

我想将这个枚举内容显示在菜单项中,以便,
主菜单“英语”包含子元素,如元音,字母,语法
这些子列表包含如下元素,


- 元音 - A,E,I,O,U
- 字母 - B,C,D,F,G,
- 语法 - 名词,Adj,动词

是否可以有一个枚举并在菜单列表或不同菜单列表的不同子菜单中对其进行排序?

1 个答案:

答案 0 :(得分:0)

您可以使用Display GroupName标记每个枚举,然后在枚举它们时,获取该GroupName并相应地进行排序

我使用这些扩展方法来获取值

    //gets the attributes from the enum
    public static T GetAttribute<T>(this Enum value) where T : Attribute
    {
        if (value == null)
        {
            throw new ArgumentNullException();
        }

        var type = value.GetType();
        var memberInfo = type.GetMember(value.ToString());
        var attributes = memberInfo[0].GetCustomAttributes(typeof(T), false);
        return (T)attributes[0];
    }

    //this will pull the DisplayGroup from the Display attribute
    public static string DisplayGroup(this Enum value)
    {
        var attribute = value.GetAttribute<DisplayAttribute>();
        return attribute == null ? value.ToString() : attribute.GroupName;
    }

    //enum decoration looks like
    public enum MyEnum
    {
        [Display(GroupName = "MyGroupName")]
        AnEnum
    }

    //pull the group name like
    var groupName = MyEnum.AnEnum.DisplayGroup();
    //Assert.IsTrue(groupName.Equals("MyGroupName");