Enum上的IEnumerable扩展方法

aha*_*ker 25 c# linq extension-methods enums

我有一个enum(下面),我希望能够使用LINQ扩展方法.

enum Suit{
    Hearts = 0,
    Diamonds = 1,
    Clubs = 2,
    Spades = 3
}
Run Code Online (Sandbox Code Playgroud)

Enum.GetValues(...)是返回类型System.Array,但我似乎无法访问ToList()扩展或其他任何类型.

我只是想写点像......

foreach(Suit s in Enum.GetValues(typeof(Suit)).Select(x=>x).Where(x=> x != param)){}
Run Code Online (Sandbox Code Playgroud)

有什么我想念的,或者有人可以向我解释为什么这是不可能的?

谢谢.

And*_*are 42

Enum.GetValues返回一个System.ArraySystem.Array唯一实现IEnumerable,而不是IEnumerable<T>所以你需要使用Enumerable.OfType扩展方法来转换IEnumerableIEnumerable<Suit>这样的:

Enum.GetValues(typeof(Suit))
            .OfType<Suit>()
            .Where(x => x != param);
Run Code Online (Sandbox Code Playgroud)

编辑:我删除了调用,IEnumerable.Select因为它是一个多余的投影,没有任何有意义的翻译.您可以自由过滤IEnumerable<Suit>从中返回的内容OfType<T>.


Lee*_*Lee 7

Array实现IEnumerable,因此您需要使用Cast<Suit>OfType<Suit>获取IEnumerble<T>类似ToList()的扩展;