繁体   English   中英

Enum上的IEnumerable扩展方法

[英]IEnumerable Extension Methods on an Enum

我有一个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)){}

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

谢谢。

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的调用,因为它是一个多余的投影,没有任何有意义的翻译。 您可以自由过滤从OfType<T>返回的IEnumerable<Suit> OfType<T>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM