我如何干净地编写一个方法,将任何类型的枚举 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>();
我写了两个方法,它们采用通用枚举和 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>();