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
- Gli oggetti CallOut di Expression Blend 4.0
- Configurazione tramite environment variable in ASP.NET Core
- Controllare gli accessi IP alle app con Azure Container Apps
- Creare applicazioni web native con Electron
- Utilizzare le sequence di SQL Server in Entity Framework Core
- Update NoDo di marzo 2011 di Windows Phone in fase di distribuzione
- Tile, notifiche e background task in Windows Phone 8
- Mantenere l'ordine dei dati in una query PLINQ