在某些情况下,我希望获得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
部分,因为&#34; 约束不能是特殊类&#39; Enum&#39; &#34;。此外,它并不完全是我想要的,因为我需要写MyEnum.GetValues()
而不是MyEnum.Value.GetValues()
,这非常令人困惑,也不是很漂亮。
这让我想到了这个问题:获取IEnumerable<MyEnum>
枚举值是否比使用Enum.GetValues()
更好?
除了Helper.GetEnumValues<MyEnum>()
之外我真的别无选择吗?
如果可能的话,我想要一个在Unity中运行的解决方案,但任何解决方案都会受到赞赏。
答案 0 :(得分:3)
这是完美的解决方案。 .Net目前不提供强类型的Enum.GetValues。人们只需花几秒钟就能理解这是做什么的,因为人们会期望.Net能够提供一种类型强烈的Enum枚举。
您正确使用GetValues作为MSDN suggests。