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

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. 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 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 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.


Approfondimenti
Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.