关于c#:有没有比Enum.GetValues()枚举枚举值更好的方法?


Is there a better way to enumerate an enum's values than Enum.GetValues()?

本问题已经有最佳答案,请猛点这里访问。

在某些情况下,我希望拥有枚举值的IEnumerable。我通常使用的代码如下:

1
Enum.GetValues(typeof(MyEnum)).OfType<MyEnum>()

但不仅是它不太好看看,大多数人将需要几秒钟来理解它做什么。编写代码也是一个巨大的痛苦,尤其是在代码中多次需要它的时候。

为了让我的生活更轻松,我决定写一个这样的扩展方法:

1
2
3
4
public static IEnumerable<T> GetValues<T>(this T e) where T : Enum
{
    return Enum.GetValues(typeof(T)).OfType<T>();
}

但我必须去掉where T : Enum部分,因为"约束不能是特殊类"enum"。而且,这也不是我想要的,因为我要写的不是MyEnum.GetValues(),而是MyEnum.Value.GetValues(),这很混乱,也不是很漂亮。

这就引出了一个问题:有没有比使用Enum.GetValues()更好的方法来获取枚举值的IEnumerable

我真的别无选择,只能做一件事吗?

如果可能的话,我希望有一个统一的解决方案,但是任何解决方案都会受到赞赏。


这是完美的解决方案。.NET此时不提供强类型的Enum.GetValues。人们只需几秒钟就可以理解这一点,因为人们希望.NET现在提供一种类型枚举的强类型枚举。

您按照msdn的建议正确使用了getValues。