Преобразование CollectionBase в список или тип данных, используемый с Linq

Я использую ячейки Aspose для управления таблицами Excel. Один из типов в API - это коллекция изображений в электронной таблице, производная от CollectionBase:

см. эту ссылку: http://www.aspose.com/documentation/.net-components/aspose.cells-for-.net/aspose.cells.pictures.html

Я хочу преобразовать этот тип во что-то, что позволяет мне использовать выражения Linq

Какие для этого есть варианты?

Думаю, я мог бы перебрать его и вручную добавить в new List<Picture>. Но есть ли лучший способ сделать это?

Я прочитал этот вопрос Добавление IEnumerable ‹T› в класс, производный от CollectionBase

Но я, очевидно, не контролирую класс, реализующий CollectionBace, поскольку это сторонний продукт.


person ChrisCa    schedule 15.10.2009    source источник


Ответы (1)


Просто используйте метод расширения Enumerable.Cast<T>() в неуниверсальном IEnumerable интерфейсе, который вы можете сделать неявно в выражении запроса:

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

или явно, например, если вы хотите использовать точечную нотацию:

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

Альтернативой Cast<T>() является OfType<T>(), который в основном игнорирует любые элементы, которые не т правильного типа. В данном случае я думаю, что Cast<T>() более уместен.

Если по какой-то причине вы хотите преобразовать всю коллекцию в List<T>, это тоже легко:

List<Picture> list = pictures.Cast<Picture>().ToList();
person Jon Skeet    schedule 15.10.2009