枚举的计数和ToList扩展方法?

3

是否可以为枚举实例创建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(); 
    } 
}

非常感谢!

从客户端的角度来看,您的扩展方法似乎没有太多意义。DayOfWeek.Monday.ToList()DayOfWeek.Monday.Count() - dcastro
2个回答

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://dev59.com/D3E95IYBdhLWcg3wKq6q#2422169


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接