How to sort enum using a custom order attribute?

前端 未结 4 1656
陌清茗
陌清茗 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 07:07

    Assume the OrderAttribute class is as follows:

    public class OrderAttribute : Attribute
    {
        public readonly int Order;
    
        public OrderAttribute(int order)
        {
            Order = order;
        }
    }
    

    The helper method to obtain sorted values of enum:

    public static T[] SortEnum()
    {
        Type myEnumType = typeof(T);
        var enumValues = Enum.GetValues(myEnumType).Cast().ToArray();
        var enumNames = Enum.GetNames(myEnumType);
        int[] enumPositions = Array.ConvertAll(enumNames, n =>
        {
            OrderAttribute orderAttr = (OrderAttribute)myEnumType.GetField(n)
                .GetCustomAttributes(typeof(OrderAttribute), false)[0];
            return orderAttr.Order;
        });
    
        Array.Sort(enumPositions, enumValues);
    
        return enumValues;
    }
    

提交回复
热议问题