Enum上的IEnumerable扩展方法

时间:2009-11-17 22:07:31

标签: c# linq extension-methods enums

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

enum Suit{
    Hearts = 0,
    Diamonds = 1,
    Clubs = 2,
    Spades = 3
}

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

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

foreach(Suit s in Enum.GetValues(typeof(Suit)).Select(x=>x).Where(x=> x != param)){}

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

感谢。

2 个答案:

答案 0 :(得分:42)

Enum.GetValues返回System.ArraySystem.Array仅实现IEnumerable而不是IEnumerable<T>,因此您需要使用Enumerable.OfType扩展方法像这样将IEnumerable转换为IEnumerable<Suit>

Enum.GetValues(typeof(Suit))
            .OfType<Suit>()
            .Where(x => x != param);

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

答案 1 :(得分:7)

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