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 per classe derivata da CollectionBase

Ma io ovviamente non ho il controllo sulla classe che implementa CollectionBace in quanto è un prodotto di terze parti

È stato utile?

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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top