Następująca metoda C# będzie zawierała listę wszystkich możliwych do zsynchronizowania typów znalezionych w określonym zestawie. (Używane przestrzenie nazw: System, 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);
}
Poniższa metoda C# korzysta z poprzedniego zrobić to samo dla wszystkich zespołów w katalogu i jego podkatalogów np „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);
}
nie jestem pewien lista wszystkich jednorazowych jest bardzo użyteczny, ale użyłem podobnego kodu, aby znaleźć inne ciekawe rzeczy podobnie jak pełna lista kodowań tekstowych obsługiwanych przez platformę .NET.
Dlaczego chcesz zadzwonić do połączenia.Zamknij() przed nawiasem końcowym? Nie wiem, że w układance jest wiele innych elementów. –
Dlaczego lista? Możesz łatwo sprawdzić, czy obiekt implementuje IDisposable. – Groo
@Groo: Naprawdę musisz sprawdzić dokumenty, niektóre typy ukrywają Dispose(). To nie takie proste. –