Convert CollectionBase la lista o il tipo di dati utilizzabili con Linq
-
21-09-2019 - |
Domanda
Sono utilizzando cellule Aspose per manipolare fogli di calcolo Excel. Uno dei tipi di API è una raccolta di immagini nel foglio di calcolo, che deriva da CollectionBase:
vedi questo link: http: // www .aspose.com / documentazione / .NET-componenti / aspose.cells-for-.net / aspose.cells.pictures.html
voglio convertire questo tipo a qualcosa che mi permette di usare espressioni Linq
Quali sono le opzioni per questo?
Credo che avrei potuto scorrere su di esso e aggiungere manualmente a una new List<Picture>
Ma c'è un modo migliore per fare questo?
Ho letto questa domanda
Aggiunta IEnumerable
Ma io ovviamente non ho il controllo sulla classe che implementa CollectionBace in quanto è un prodotto di terze parti
Soluzione
Basta usare il href="http://msdn.microsoft.com/en-us/library/bb341406.aspx" rel="noreferrer"> Enumerable.Cast<T>()
metodo di estensione IEnumerable non generico interfaccia, che si può fare in modo implicito in un'espressione di query:
var query = from Picture picture in pictures
where ...
select ...;
o esplicitamente, per esempio se si desidera utilizzare la notazione del punto:
var query = pictures.Cast<Picture>()
.Where(...)
.Select(...);
Un'alternativa al Cast<T>()
è OfType<T>()
- che ignora sostanzialmente tutti gli elementi che non sono del tipo giusto. In questo caso penso che sia più appropriato Cast<T>()
però.
Se si desidera convertire l'intera collezione a un List<T>
per qualsiasi motivo, questo è troppo facile:
List<Picture> list = pictures.Cast<Picture>().ToList();