有几种情况,我想有一个枚举值的IEnumerable<MyEnum>
。我通常使用的代码是这样的:
Enum.GetValues(typeof(MyEnum)).OfType<MyEnum>()
但它不仅不好看,而且大多数人需要几秒钟才能理解它的作用。这也是一个巨大的痛苦编写,特别是当您在整个代码中多次需要它时。
为了使我的工作更容易,我决定写一个这样的扩展方法:
public static IEnumerable<T> GetValues<T>(this T e) where T : Enum
{
return Enum.GetValues(typeof(T)).OfType<T>();
}
除了我必须摆脱where T : Enum
部分,因为"约束不能是特殊类'Enum'"。此外,这也不是我想要的,因为我需要写MyEnum.Value.GetValues()
而不是MyEnum.GetValues()
,这很令人困惑,也不是很漂亮。
这导致我这个问题:是否有更好的方法来获得枚举值的IEnumerable<MyEnum>
比使用Enum.GetValues()
?
我真的没有别的选择,只能把它改成Helper.GetEnumValues<MyEnum>()
吗?
如果可能的话,我想要一个在Unity中工作的解决方案,但任何解决方案都会受到赞赏。
这是完美的解决方案。net不提供强类型Enum。GetValues。人们只需要几秒钟就能理解它的作用,因为人们希望。net现在就提供一种类型的Enums的强类型枚举。
您正在正确使用GetValues作为MSDN建议。