Phương pháp C# sau sẽ liệt kê tất cả các loại IDisposable tìm thấy trong một hội đồng nhất định. (Namespace sử dụng: Hệ thống, 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);
}
C# phương pháp sau đây làm cho việc sử dụng trước đó để làm tương tự cho tất cả các cụm trong một thư mục và thư mục con của nó , ví dụ "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);
}
Tôi không chắc chắn trong danh sách của tất cả các lần hiện là rất hữu ích, nhưng tôi đã sử dụng mã tương tự để tìm những thứ thú vị khác như danh sách đầy đủ các mã hóa văn bản được hỗ trợ bởi .NET framework.
Nguồn
2009-06-24 10:56:30
Tại sao bạn cần gọi kết nối.Đóng() trước khung kết thúc? Tôi không biết rằng có nhiều phần khác trong câu đố. –
Tại sao lại có danh sách? Bạn có thể dễ dàng kiểm tra xem một đối tượng có triển khai IDisposable hay không. – Groo
@Groo: Bạn thực sự phải kiểm tra tài liệu, một số loại ẩn Dispose(). Vì vậy, không phải là dễ dàng. –