Pregunta

Estoy utilizando células Aspose para manipular hojas de cálculo de Excel. Uno de los tipos en la API es una colección de imágenes en la hoja de cálculo, que se deriva de CollectionBase:

véase este enlace: http: // www .aspose.com / documentación / .NET componentes / aspose.cells-for-.net / aspose.cells.pictures.html

Quiero convertir este tipo a algo que me permite usar expresiones LINQ

¿Cuáles son las opciones para esto?

Creo que podría iterar sobre ella y añadir manualmente a un new List<Picture> Pero, ¿existe una mejor manera de hacer esto?

He leído esta pregunta a clase derivada de CollectionBase href="https://stackoverflow.com/questions/1468336/adding-ienumerablet-to-class-derived-from-collectionbase">

Pero, obviamente, no tengo control sobre la clase que implementa CollectionBace ya que es un producto de terceros

¿Fue útil?

Solución

Sólo tiene que utilizar la href="http://msdn.microsoft.com/en-us/library/bb341406.aspx" rel="noreferrer"> Enumerable.Cast<T>() método de extensión IEnumerable no genérico interfaz, que se puede hacer de manera implícita en una expresión de consulta:

var query = from Picture picture in pictures
            where ...
            select ...;

o explícitamente, por ejemplo, si desea utilizar la notación de puntos:

var query = pictures.Cast<Picture>()
                    .Where(...)
                    .Select(...);

Una alternativa a Cast<T>() es OfType<T>() - que básicamente pasa por alto los elementos que no son del tipo correcto. En este caso creo que es más apropiado Cast<T>() sin embargo.

Si desea convertir toda la colección a un List<T> por cualquier razón, eso es también muy fácil:

List<Picture> list = pictures.Cast<Picture>().ToList();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top