Подтвердить что ты не робот

IEnumerable Extension Methods при переходе

У меня есть перечисление (ниже), что я хочу использовать метод расширения 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)){}

Есть ли что-то, что мне не хватает, или кто-нибудь может объяснить мне, почему это невозможно?

Спасибо.

4b9b3361

Ответ 1

Enum.GetValues возвращает System.Array и System.Array только реализует IEnumerable, а не IEnumerable<T>, поэтому вам нужно будет использовать Enumerable.OfType метод расширения для преобразования IEnumerable в IEnumerable<Suit> следующим образом:

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

Изменить: Я удалил вызов IEnumerable.Select, поскольку это был излишний проектор без какого-либо значимого перевода. Вы можете свободно фильтровать IEnumerable<Suit>, который возвращается из OfType<T>.

Ответ 2

Array реализует IEnumerable, поэтому вам нужно использовать Cast<Suit> или OfType<Suit>, чтобы получить расширения IEnumerble<T>, такие как ToList();