Il seguente metodo C# elencherà tutti i tipi IDisposable trovati in un determinato gruppo. (Spazi dei nomi usati: Sistema, System.Collections.Generic, System.IO, System.Reflection)
static void PrintDisposableTypesFromFile(String path)
{
Assembly assembly = Assembly.LoadFrom(path);
foreach (Type type in assembly.GetTypes())
if (type.GetInterface("IDisposable") != null)
Console.WriteLine(type.FullName);
}
Il seguente metodo di C# si avvale della precedente per fare lo stesso per tutte le assemblee in una directory e le sue sottodirectory , per esempio "C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727":
static void PrintDisposableTypesFromDirectory(DirectoryInfo dir, bool warn)
{
foreach (FileInfo file in dir.GetFiles("*.dll"))
{
try
{
PrintDisposableTypesFromFile(file.FullName);
}
catch (Exception ex)
{
if (warn)
{
Console.Error.WriteLine(
String.Format(
"WARNING: Skipped {0}: {1}",
new object[] { file.FullName, ex.Message }));
}
}
}
// recurse
foreach (DirectoryInfo subdir in dir.GetDirectories())
PrintDisposableTypesFromDirectory(subdir, warn);
}
Non sono sicuro che l'elenco di tutti i prodotti monouso è molto utile, ma ho usato un codice simile a trovare altre cose interessanti come l'elenco completo delle codifiche di testo supportate dal framework .NET.
fonte
2009-06-24 10:56:30
Perché è necessario chiamare la connessione.Chiudi() prima della staffa finale? Non so che ci sono molti altri pezzi del puzzle. –
Perché una lista? Puoi facilmente verificare se un oggetto implementa IDisposable. – Groo
@Groo: Devi davvero controllare i documenti, alcuni tipi nascondono Dispose(). Quindi non così facile. –