【发布时间】:2020-07-20 07:15:54
【问题描述】:
我找到了一种扩展方法,可以使用存储在自定义属性中的值对枚举进行排序。
public static class EnumExtenstions
{
public static IEnumerable<TEnum> EnumGetOrderedValues<TEnum>(this Type enumType)
{
var fields = enumType.GetFields(BindingFlags.Public | BindingFlags.Static);
var orderedValues = new List<Tuple<int, TEnum>>();
foreach (var field in fields)
{
var orderAtt = field.GetCustomAttributes(typeof(EnumOrderAttribute), false).SingleOrDefault() as EnumOrderAttribute;
if (orderAtt != null)
{
orderedValues.Add(new Tuple<int, TEnum>(orderAtt.Order, (TEnum)field.GetValue(null)));
}
}
return orderedValues.OrderBy(x=>x.Item1).Select(x=>x.Item2).ToList();
}
}
我想改变它,所以我将 EnumOrderAttribute 作为参数传入,并在每次迭代时计算出它的值。 EnumOrderAttribute 在不同的项目中声明。
我怎样才能改变这个方法来完成这个?
【问题讨论】:
-
谢谢 Aybe,是的,这是我正在考虑更改的第二个答案
-
当您说“更改此内容,以便我将 EnumOrderAttribute 作为参数传递”时,您是否尝试传递属性类型并相应地进行排序?还是这真的是重复的?
-
嗨 Oguz,是的,传递属性类型并相应地进行排序
-
您的意思是,就像您可以将任何属性类型作为通用参数或方法参数传递一样,(而不是将其硬编码为 EnumOrderAttribute 类型)?
标签: c# enums extension-methods custom-attributes