Convertir CollectionBase à la liste ou le type de données utilisable avec Linq
-
21-09-2019 - |
Question
Je suis en utilisant des cellules Aspose pour manipuler des feuilles de calcul Excel. L'un des types de l'API est une collection d'images dans la feuille de calcul, qui dérive de CollectionBase:
voir ce lien: http: // www .aspose.com / documentation / .net-composants / aspose.cells-for-.net / aspose.cells.pictures.html
Je veux convertir ce type à quelque chose qui me permet d'utiliser des expressions Linq
Quelles sont les options pour cela?
Je suppose que je pourrais itérer et ajouter manuellement à un new List<Picture>
Mais est-il une meilleure façon de le faire?
J'ai lu cette question
Ajout IEnumerable
Mais évidemment je n'ai pas le contrôle de la classe qui implémente CollectionBace car il est un produit tiers
La solution
Il suffit d'utiliser la méthode d'extension Enumerable.Cast<T>()
sur le IEnumerable
non générique interface, que vous pouvez faire implicitement dans une expression de requête:
var query = from Picture picture in pictures
where ...
select ...;
ou explicitement, par exemple si vous voulez utiliser la notation de points:
var query = pictures.Cast<Picture>()
.Where(...)
.Select(...);
Une alternative à Cast<T>()
est OfType<T>()
- qui ignore essentiellement les éléments qui ne sont pas du bon type. Dans ce cas, je pense que Cast<T>()
est plus approprié que.
Si vous voulez convertir toute la collection à un List<T>
pour une raison quelconque, c'est facile aussi:
List<Picture> list = pictures.Cast<Picture>().ToList();