我编写了两个采用泛型枚举并返回其所有枚举的方法。问题是这两者都不是最佳做法。因此,我怀疑这可能是采取不同方法的另一种方式。无论如何,这里有两种方法:
一
public static List<T> GetTypedEnumItems<T>( this T selected) where T : struct , IConvertible
{
// must be an enumerated type
var enumType = typeof(T);
var values = Enum.GetValues(enumType).Cast<T>().ToList();
return values;
}
可以使用以下语法调用:
var items = RolebackActionEnum .DeadOff.GetTypedEnumItems();
这不是最佳实践,因为我不需要在扩展方法中指定我刚抛弃的枚举值。
两个
public static List <T> GetTypedEnumItems<T>( this Type selected) where T : struct , IConvertible
{
// must be an enumerated type
var values = Enum.GetValues(selected).Cast<T>().ToList();
return values;
}
可以使用以下语法调用:
var items = typeof (RolebackActionEnum ).GetTypedEnumItems< RolebackActionEnum>();
这不是最佳做法,因为我指定了Enum两次。
简而言之,最佳实践必须包括指定枚举一次以及不指定参数的虚拟值。
请帮忙!
答案 0 :(得分:2)
为什么不使用简单的静态方法,而不是扩展方法(由于this
关键字扩展了实例)?
public static class EnumHelper
{
public static IEnumerable<T> GetEnumValues<T>()
where T : struct, IConvertible
{
return Enum.GetValues(typeof(T)).Cast<T>();
}
}
并像这样使用它:
var items = EnumHelper.GetEnumValues<RolebackActionEnum>();