代码之家  ›  专栏  ›  技术社区  ›  ahawker

枚举上的IEnumerable扩展方法

  •  25
  • ahawker  · 技术社区  · 16 年前

    我有一个枚举(下面),我希望能够对其使用Linq扩展方法。

    enum Suit{
        Hearts = 0,
        Diamonds = 1,
        Clubs = 2,
        Spades = 3
    }
    

    getValues(…)是返回类型System.Array,但我似乎无法访问ToList()扩展或任何其他类型的扩展。

    我只是想写些……

    foreach(Suit s in Enum.GetValues(typeof(Suit)).Select(x=>x).Where(x=> x != param)){}
    

    有没有什么东西我找不到,或者有人能解释一下为什么这不可能?

    谢谢。

    2 回复  |  直到 16 年前
        1
  •  42
  •   Andrew Hare    16 年前

    Enum.GetValues 返回A System.Array 阵列系统 仅实现 IEnumerable 而不是 IEnumerable<T> 所以你需要使用 Enumerable.OfType 用于转换的扩展方法 可枚举的 IEnumerable<Suit> 这样地:

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

    编辑: 我把电话转到 IEnumerable.Select 因为这是一个多余的投影,没有任何有意义的翻译。你可以自由过滤 IEnumerable<套装> 那是从 OfType<T> .

        2
  •  7
  •   Lee    16 年前

    数组实现IEnumerable,因此需要使用 Cast<Suit> OfType<Suit> 得到 IEnumerble<T> 像tolist()这样的扩展;