Eseguire query LINQ su liste non generiche con l'operatore Cast

di Stefano Mostarda, in LINQ,

Molto spesso capita di avere a che fare con delle liste non generiche come gli ArrayList o qualunque altro oggetto implementi IEnumerable e non IEnumerable<T>. Questo è soprattutto vero quando capita di fare porting di applicazioni dalla versione 1.x alla 3.5 ma anche quando capita di interrogare le proprietà di alcuni oggetti (Controls dell'oggetto Page, Nodes dell'oggetto TreeView, ecc ecc.).

LINQ può eseguire query su qualunque lista implementi l'interfaccia IEnumerable<T> quindi quelle precedente menzionate non sono interrogabili. Per fare in modo che anche le liste non generiche diventino interrogabili, si può utilizzare il metodo Cast che converte la lista da un IEnumerable ad un IEnumerable<T> dove T è un tipo che si passa in input al metodo. In questo modo, si possono eseguire, nella solita modalità, query sulla lista convertita.

Page.Controls.Cast<Control>().Where(o=> o.ID == "id");

Bisogna fare attenzione al tipo che si passa in input al metodo Cast in quanto, se la lista contiene un oggetto che non si può castare al tipo, viene sollevata un'eccezione.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi