2009-10-15 6 views
17

Ich benutze Aspose Zellen, um Excel-Tabellen zu manipulieren. Einer der Typen in der API ist eine Sammlung von Bildern in der Tabelle, die von Collection ableitet:Convert CollectionBase zu List oder Datentyp mit Linq

siehe diesen Link: http://www.aspose.com/documentation/.net-components/aspose.cells-for-.net/aspose.cells.pictures.html

Ich mag diese Art etwas konvertieren, die mir Linq verwenden können Ausdrücke

Welche Möglichkeiten gibt es?

Ich denke, ich könnte darüber iterieren und es manuell zu einem new List<Picture> hinzufügen Aber gibt es einen besseren Weg, dies zu tun?

ich diese Frage gelesen haben Adding IEnumerable<T> to class derived from CollectionBase

Aber ich habe natürlich nicht die Kontrolle über die Klasse, die CollectionBace implementiert, wie es ein Drittprodukt ist

Antwort

49

einfach die Methode Enumerable.Cast<T>() Erweiterung auf der nicht generic IEnumerable Schnittstelle, die Sie implizit in einem Abfrageausdruck kann:

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

oder explizit zum Beispiel, wenn Sie wollen Punkt verwenden notatio n:

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

Eine Alternative zu Cast<T>()OfType<T>() ist - was im Grunde alle Elemente ignoriert, die nicht von der richtigen Art sind. In diesem Fall denke ich Cast<T>() ist jedoch angemessener.

Wenn Sie die ganze Sammlung zu einem List<T> aus irgendeinem Grund konvertieren wollen, ist das einfach zu:

List<Picture> list = pictures.Cast<Picture>().ToList();