转换CollectionBase的列出或数据类型可用的LINQ(Convert Collection

2019-08-18 07:36发布

我使用的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类的控制,因为它是一个第三方产品

Answer 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();


文章来源: Convert CollectionBase to List or data type usable with Linq