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 to classe dérivée de CollectionBase

Mais évidemment je n'ai pas le contrôle de la classe qui implémente CollectionBace car il est un produit tiers

Était-ce utile?

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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top