Enum的Count和ToList扩展方法?

时间:2015-01-13 09:28:09

标签: c# enums count extension-methods tolist

是否可以为Enum实例创建Count和ToList扩展方法? 我试过这个,但不知道如何更换“???”,与枚举“e”的类型有关。

public static class EnumExtensions 
{ 
    public static int Count(this Enum e) 
    { 
        return Enum.GetNames(typeof(???)).Length; 
    } 

    public static List<???> ToList(this Enum e) 
    { 
        return Enum.GetValues(typeof(???)).Cast<???>().ToList(); 
    } 
}

非常感谢!

2 个答案:

答案 0 :(得分:3)

为什么需要新的扩展方法?您可以使用可用的:

string[] dayNames = Enum.GetNames(typeof(DayOfWeek));
int count = dayNames.Count();
List<string> list = dayNames.ToList(); 

如果你想要一个枚举类型列表:

List<DayOfWeek> list = Enum.GetValues(typeof(DayOfWeek)).Cast<DayOfWeek>().ToList();

扩展名是没有意义的,因为只有在实例不是类型的情况下才可以扩展。但您可以使用这样的工厂方法:https://stackoverflow.com/a/2422169/284240

答案 1 :(得分:1)

您可以使用e.GetType()代替typeof(???)

public static int Count(this Enum e) 
{ 
    return Enum.GetNames(e.GetType()).Length; 
} 
但是,我不认为它会像你期望的那样工作,因为你不能这样做:

var shouldBe7 = DayOfWeek.Count(); // does not compile

但你可以做到

var shouldBe7 = DayOfWeek.Monday.Count(); // 7

简单地做一下可能更好:

public static class EnumHelper
{
    public static int Count(Type e)
    {
        // use reflection to check that e is an enum
        // or just wait for the Enum method to fail

        return Enum.GetNames(e).Length;
    }
}

然后用作

var shouldBe7 = EnumHelper.Count(typeof(DayOfWeek)); // 7