我有一个这样的枚举:
enum MyEnum{
[Order(1)]
ElementA = 1,
[Order(0)]
ElementB = 2,
[Order(2)]
ElementC = 3
}
我想列出它的元素,按我编写的自定义顺序属性排序,以便我得到一个排序的项目列表。
我正在获取描述属性,但只是针对这样一个元素:
FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
它可能是相同的东西,但需要处理所有枚举并返回一个列表或另一个排序的枚举。
最佳答案
假设 OrderAttribute
类如下:
public class OrderAttribute : Attribute
{
public readonly int Order;
public OrderAttribute(int order)
{
Order = order;
}
}
获取枚举排序值的辅助方法:
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;
}
关于c# - 如何使用自定义顺序属性对枚举进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30654151/