如何干净地编写一个方法,使任何类型的枚举返回其所有枚举?

时间:2015-03-02 11:57:23

标签: c# generics enums extension-methods

我编写了两个采用泛型枚举并返回其所有枚举的方法。问题是这两者都不是最佳做法。因此,我怀疑这可能是采取不同方法的另一种方式。无论如何,这里有两种方法:

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两次。

简而言之,最佳实践必须包括指定枚举一次以及不指定参数的虚拟值。

请帮忙!

1 个答案:

答案 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>();