我有一个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)){}
我有什么遗漏,或者有人可以向我解释为什么这是不可能的?
感谢。
答案 0 :(得分:42)
Enum.GetValues
返回System.Array
而System.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>
扩展名;