Enum上的IEnumerable扩展方法
我有一个枚举(下面),我希望能够使用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)){}
有什么我想念的,或者有人可以向我解释为什么这是不可能的?
谢谢。
Enum.GetValues
返回一个System.Array
而System.Array
只实现IEnumerable
而不是IEnumerable
所以你需要使用Enumerable.OfType
扩展方法将IEnumerable
转换为IEnumerable
如下所示:
Enum.GetValues(typeof(Suit)) .OfType() .Where(x => x != param);
编辑:我删除了对IEnumerable.Select
的调用,因为它是一个多余的投影,没有任何有意义的翻译。 您可以自由过滤从OfType
返回的IEnumerable
OfType
。
Array实现IEnumerable,因此您需要使用Cast
或IEnumerble
OfType
来获取类似ToList()的IEnumerble
扩展;