2009-10-15 12 views
17

Używam komórek Aspose do manipulowania arkuszami kalkulacyjnymi programu Excel. Jednym z typów w API jest zbiorem zdjęć w arkuszu kalkulacyjnym, który wywodzi się z CollectionBase:Konwertuj kolekcję na listę lub typ danych używany z Linq

zobaczyć ten link: http://www.aspose.com/documentation/.net-components/aspose.cells-for-.net/aspose.cells.pictures.html

chcę przekonwertować ten typ na coś, co pozwala mi używać LINQ wyrażenia

Jakie są opcje tego?

Domyślam się, że mógłbym iterować nad nim i ręcznie dodać go do new List<Picture> Ale czy jest lepszy sposób to zrobić?

Znam to pytanie Adding IEnumerable<T> to class derived from CollectionBase

Ale oczywiście nie mają kontroli nad klasy, która implementuje CollectionBace ponieważ jest to produkt strona trzecia

Odpowiedz

49

Wystarczy użyć metody Enumerable.Cast<T>() przedłużenie na nie- generic IEnumerable interfejs, który można zrobić w sposób dorozumiany w wyrażeniu kwerendy:

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

lub jawnie, na przykład, jeśli chcesz używać kropki notatio n:

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

Alternatywą Cast<T>() jest OfType<T>() - które zasadniczo ignoruje wszelkie elementy, które nie mają odpowiedniego typu. W tym przypadku myślę, że bardziej odpowiednie jest jednak Cast<T>().

Jeśli chcesz przekonwertować całą kolekcję do List<T> z jakiegokolwiek powodu, to zbyt proste:

List<Picture> list = pictures.Cast<Picture>().ToList(); 
Powiązane problemy