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)){}
Есть ли что-то, что мне не хватает, или кто-нибудь может объяснить мне, почему это невозможно?
Спасибо.
Ответы
Ответ 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();