我如何干净地编写一个方法,将任何类型的枚举 return 从其所有枚举中提取出来?

How do I cleanly write a method that takes any type of Enum to return out all of its enumerations?

我写了两个方法,它们采用通用枚举和 return 它的所有枚举。问题是两者都不是最佳实践。所以,我怀疑这可能是另一种可能采用不同方法的方式。不管怎样,这里有两种方法:

一个

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 一次以及不为参数指定虚拟值。

请帮忙!

为什么不使用简单的静态方法而不是扩展方法(由于 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>();