Подтвердить что ты не робот

Преобразование 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, поскольку это сторонний продукт

4b9b3361

Ответ 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();