Converta a coleçãoBase para listar ou tipo de dados utilizável com LINQ
-
21-09-2019 - |
Pergunta
Estou usando células Asposas para manipular as planilhas do Excel. Um dos tipos da API é uma coleção de imagens na planilha, que deriva da Coleção:
Veja este link:http://www.aspose.com/documentation/.net-coMponnts/aspose.cells-for-.net/aspose.cells.pictures.html
Eu quero converter esse tipo para algo que me permita usar expressões LINQ
Quais são as opções para isso?
Eu acho que poderia itera sobre isso e adicioná -lo manualmente a um new List<Picture>
Mas existe uma maneira melhor de fazer isso?
Eu li esta perguntaAcrescentando ienumerableu003CT> para a classe derivada da coleção
Mas obviamente não tenho controle sobre a classe que implementa a coleta Bace, pois é um produto de terceiros
Solução
Basta usar o Enumerable.Cast<T>()
Método de extensão no não genérico IEnumerable
Interface, que você pode fazer implicitamente em uma expressão de consulta:
var query = from Picture picture in pictures
where ...
select ...;
ou explicitamente, por exemplo, se você deseja usar a notação de ponto:
var query = pictures.Cast<Picture>()
.Where(...)
.Select(...);
Uma alternativa a Cast<T>()
é OfType<T>()
- que basicamente ignora quaisquer elementos que não sejam do tipo certo. Nesse caso eu acho Cast<T>()
é mais apropriado embora.
Se você deseja converter toda a coleção para um List<T>
Por qualquer motivo, isso também é fácil:
List<Picture> list = pictures.Cast<Picture>().ToList();