枚举上的 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)){}
我是否缺少某些东西,或者有人可以向我解释为什么这是不可能的?
谢谢。
I have an enum(below) that I want to be able to use a LINQ extension method on.
enum Suit{
Hearts = 0,
Diamonds = 1,
Clubs = 2,
Spades = 3
}
Enum.GetValues(...) is of return type System.Array, but I can't seem to get access to a ToList() extension or anything else of that sort.
I'm just looking to write something like...
foreach(Suit s in Enum.GetValues(typeof(Suit)).Select(x=>x).Where(x=> x != param)){}
Is there something I'm missing, or can someone explain to me why this isn't possible?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Enum.GetValues
返回一个系统。 Array
和System.Array
仅实现IEnumerable
而不是IEnumerable
,因此您需要使用Enumerable.OfType
扩展方法来转换将IEnumerable
更改为IEnumerable
,如下所示:编辑: 我按原样删除了对
IEnumerable.Select
的调用没有任何有意义翻译的多余投影。您可以自由过滤从OfType
返回的IEnumerable
。Enum.GetValues
returns aSystem.Array
andSystem.Array
only implementsIEnumerable
rather thanIEnumerable<T>
so you will need to use theEnumerable.OfType
extension method to convert theIEnumerable
toIEnumerable<Suit>
like this:Edit: I removed the call to
IEnumerable.Select
as it was a superfluous projection without any meaningful translation. You can freely filter theIEnumerable<Suit>
that is returned fromOfType<T>
.Array 实现了 IEnumerable,因此您需要使用
Cast
或OfType
来获取IEnumerble
扩展,例如 ToList ();Array implements IEnumerable so you'll need to use
Cast<Suit>
orOfType<Suit>
to get theIEnumerble<T>
extensions like ToList();