如何使用自定义订单属性对枚举排序? [英] How to sort enum using a custom order attribute?
本文介绍了如何使用自定义订单属性对枚举排序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个这样的枚举:
enum MyEnum{
[Order(1)]
ElementA = 1,
[Order(0)]
ElementB = 2,
[Order(2)]
ElementC = 3
}
我想列出按我编写的自定义订单属性排序的元素,以便获得排序的项目列表。
And I want to list its elements sorted by a custom order attribute I wrote, so that I get a list of items sorted.
我正在获取Description属性,但仅适用于这样的一个元素:
I am getting the Description Attribute but just for one element like this:
FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
可能有些相同,但需要对所有Enum进行处理并返回列表或另一个排序的枚举。
It may be something the same but need to work on all Enum and return a list or another sorted enum.
推荐答案
假定 OrderAttribute
类如下:
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<T>()
{
Type myEnumType = typeof(T);
var enumValues = Enum.GetValues(myEnumType).Cast<T>().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;
}
这篇关于如何使用自定义订单属性对枚举排序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文