How to sort enum using a custom order attribute?

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

    If I clearly understood your issue, here could be solution like this:

    public static class EnumExtenstions
    {
        public static IEnumerable EnumGetOrderedValues(this Type enumType)
        {
    
            var fields = enumType.GetFields(BindingFlags.Public | BindingFlags.Static);
            var orderedValues = new List>();
            foreach (var field in fields)
            {
                var orderAtt = field.GetCustomAttributes(typeof(EnumOrderAttribute), false).SingleOrDefault() as EnumOrderAttribute;
                if (orderAtt != null)
                {
                    orderedValues.Add(new Tuple(orderAtt.Order, (TEnum)field.GetValue(null)));
                }
            }
    
            return orderedValues.OrderBy(x=>x.Item1).Select(x=>x.Item2).ToList();
        }
    }
    

    usage:

    var result = typeof(enumType).EnumGetOrderedValues();
    

提交回复
热议问题