How to sort enum using a custom order attribute?

前端 未结 4 1655
陌清茗
陌清茗 2020-12-30 06:51

I have an enum like this:

enum MyEnum{
 [Order(1)]
 ElementA = 1,
 [Order(0)]
 ElementB = 2,
 [Order(2)]
 ElementC = 3
}

And I want to li

4条回答
  •  渐次进展
    2020-12-30 06:58

    public class OrderAttribute : Attribute
    {
        public int priority;
    
        public OrderAttribute(int priority)
        {
            this.priority = priority;
        }
    }
    
    public enum Test
    {
        [Order(1)] value1 = 1,
        [Order(2)] value2 = 2,
        [Order(0)] value3 = 3
    }
    
    private static void Main(string[] args)
        {
            Dictionary priorityTable = new Dictionary();
    
            var values = Enum.GetValues(typeof (Test)).Cast();
            MemberInfo[] members = typeof (Test).GetMembers();
            foreach (MemberInfo member in members)
            {
                object[] attrs = member.GetCustomAttributes(typeof(OrderAttribute), false);
                foreach (object attr in attrs)
                {
                    OrderAttribute orderAttr = attr as OrderAttribute;
    
                    if (orderAttr != null)
                    {
                        string propName = member.Name;
                        int priority = orderAttr.priority;
    
                        priorityTable.Add(propName, priority);
                    }
                }
            }
    
            values = values.OrderBy(n => priorityTable[n.ToString("G")]);
    
            foreach (var value in values)
            {
                Console.WriteLine(value);
            }
    
            Console.ReadLine();
        }
    

    This will output:

    value3

    value1

    value2

提交回复
热议问题