Il .NET Framework 4.0 apporta piccole, ma interessanti modiche alla BCL che con una serie di script si vogliono illustrare per capirne al meglio l'utilità. Tra i cambiamenti presenti, vi è un importante adeguamento delle API in modo che queste possano essere sfruttate al meglio insieme a LINQ. Laddove, infatti, una funzione possa restituire una lista, se questa può essere di molteplici elementi e richiedere molto tempo, in luogo di un List<T> o di un Array, si preferisce restituire un IEnumerable<T>. Un oggetto che implementa questa interfaccia può essere sfogliato con un foreach e posticipa il consumo delle informazioni al momento in cui le si richiedono.
Ne sono un esempio la classe File e Directory (o le rispettive FileInfo e DirectoryInfo) che dispongono dei metodi GetFiles e GetDirectories, i quale a loro volta restituiscono un array. Questo comporta l'attesa per l'intero recupero della lista dei files e delle directory, prima di poterlo consumare. I nuovi metodi EnumerateFiles e EnumerateDirectories restituiscono invece un IEnumerable permettendo di consumare subito l'enumatore interno delle API di Windows, di mostrare un progress e di effettuare query LINQ.
Nel seguente esempio si sfoglia la cartella My Documents alla ricerca di files con estensione *.txt combinando entrambi i metodi.
DirectoryInfo docDir = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)); var groups = from d in docDir.EnumerateDirectories("*", SearchOption.AllDirectories) from f in d.EnumerateFiles("*.txt") group f by f.Directory into g select g; foreach (var g in groups) { Console.WriteLine("Files into {0}", g.Key); foreach (var f in g) Console.WriteLine("\t{0}", f.Name); }
E' bene sottolineare che questo non aumenta le prestazioni di ricerca, poiché l'enumerazione su disco dev'essere comunque fatta, ma è possibile ottenere dei tagli netti di tempo qualora l'elemento da cercare sia tra i primi elementi restituiti dall'enumeratore, consentendo di fermare la ricerca.
Commenti
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
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Creare una libreria CSS universale: Cards
- Eseguire script pre e post esecuzione di un workflow di GitHub