La conversion de Tableau de IEnumerable<T>
À ma grande surprise, je reçois l'instruction suivante:
public static IEnumerable<SomeType> AllEnums
=> Enum.GetValues(typeof(SomeType));
à se plaindre de ne pas être en mesure de convertir de Système.Tableau à Système.Collection.Génériques.IEnumerable. Je pensais que le dernier était l'héritage de l'ancien. Apparemment je me trompais.
Puisque je ne peux pas LINQ ou .ToList, je ne suis pas sûr de la façon de le traiter correctement. Je préfère éviter une conversion explicite et, puisque c'est un tas de valeurs pour une enum, je ne pense pas que comme SomeType-ing, il sera d'une grande utilité, ni.
Enum.GetValues
retourne un Array
qui n'est pas fortement typé. Donc pas de surprise ici.OriginalL'auteur Konrad Viltersten | 2015-01-02
Vous devez vous connecter pour publier un commentaire.
Le général
Array
de la classe de base n'est pas typé, afin de ne pas mettre en œuvre tout type d'interfaces spécifiques; toutefois, un vecteur peut être lancé directement - etGetValues
retourne en fait un vecteur; donc:ou peut-être plus simple:
OriginalL'auteur Marc Gravell
Enum.GetValues
retourneArray
, qui met en œuvre la non-génériqueIEnumerable
, si vous avez besoin d'ajouter un plâtre:Cela fonctionne avec LINQ parce que
Cast<T>
méthode d'extension est définie pour le non-génériqueIEnumerable
interface, non seulement surIEnumerable<U>
.Edit: Un appel de
ToList()
éviter l'inefficacité associée à la marche plusieurs fois unIEnumerable<T>
produites par des méthodes LINQ avec l'exécution différée. Merci, Marc, pour un grand commentaire!Notez que vous pouvez convertir le résultat de
Enum.GetValues
directement àIEnumerable<SomeType>
, il n'y a pas besoin d'utiliserCast<>
OriginalL'auteur dasblinkenlight