枚举上的 IEnumerable 扩展方法

发布于 2024-08-12 00:15:00 字数 414 浏览 3 评论 0原文

我有一个枚举(如下),我希望能够在其上使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

晨曦慕雪 2024-08-19 00:15:00

Enum.GetValues 返回一个系统。 ArraySystem.Array 仅实现 IEnumerable 而不是 IEnumerable,因此您需要使用Enumerable.OfType 扩展方法来转换将 IEnumerable 更改为 IEnumerable,如下所示:

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

编辑: 我按原样删除了对 IEnumerable.Select 的调用没有任何有意义翻译的多余投影。您可以自由过滤从 OfType 返回的 IEnumerable

Enum.GetValues returns a System.Array and System.Array only implements IEnumerable rather than IEnumerable<T> so you will need to use the Enumerable.OfType extension method to convert the IEnumerable to IEnumerable<Suit> like this:

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

Edit: I removed the call to IEnumerable.Select as it was a superfluous projection without any meaningful translation. You can freely filter the IEnumerable<Suit> that is returned from OfType<T>.

固执像三岁 2024-08-19 00:15:00

Array 实现了 IEnumerable,因此您需要使用 CastOfType 来获取 IEnumerble 扩展,例如 ToList ();

Array implements IEnumerable so you'll need to use Cast<Suit> or OfType<Suit> to get the IEnumerble<T> extensions like ToList();

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文