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

StackOverflow https://stackoverflow.com/questions/1571425

Вопрос

Я использую ячейки 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, поскольку это сторонний продукт

Это было полезно?

Решение

Просто используйте 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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top