Enum 的 Count 和 ToList 扩展方法?
Count and ToList extension method for Enum?
是否可以为 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();
}
}
非常感谢!
您可以使用 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
为什么需要新的扩展方法?您可以使用可用的:
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();
扩展是没有意义的,因为只有当你有一个实例而不是一个类型时你才能扩展。但是你可以像这样使用工厂方法:
是否可以为 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();
}
}
非常感谢!
您可以使用 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
为什么需要新的扩展方法?您可以使用可用的:
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();
扩展是没有意义的,因为只有当你有一个实例而不是一个类型时你才能扩展。但是你可以像这样使用工厂方法: