2009-10-15 7 views
17

Estoy usando 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:Convertir CollectionBase a la lista o tipo de datos utilizables con Linq

ver este enlace: http://www.aspose.com/documentation/.net-components/aspose.cells-for-.net/aspose.cells.pictures.html

Quiero cambiar este tipo a algo que me permite utilizar LINQ expresiones

¿Cuáles son las opciones para esto?

Supongo que podría iterar sobre él y agregarlo manualmente a new List<Picture> ¿Pero existe una forma mejor de hacerlo?

He leído esta pregunta Adding IEnumerable<T> to class derived from CollectionBase

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

Respuesta

49

sólo tiene que utilizar el método Enumerable.Cast<T>() extensión de la no genérica IEnumerable 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 puntos notatio n:

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 Cast<T>() es más apropiado.

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(); 
Cuestiones relacionadas