这似乎必须在某处记录,但我找不到任何地方。也许我的谷歌正在削弱。
答案 0 :(得分:10)
您意识到这取决于您所谓的 .NET Framework类。您可能想要指定要查找的程序集。有了这些信息,您可以加载这些程序集并使用反射列出在给定程序集中实现IDisposable的所有公共类型。我们以系统程序集为例:
class Program
{
static void Main()
{
var types = Assembly
.Load("System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
.GetTypes()
.Where(t => typeof(IDisposable).IsAssignableFrom(t))
.OrderBy(t => t.Name);
foreach (var type in types)
{
Console.WriteLine(type);
}
}
}
答案 1 :(得分:1)
为什么要在工具IDisposable
中列出所有类的列表?似乎更相关的问题是“如何判断一个类是否实现IDisposable
?”如果您需要文档,MSDN将告诉您给定类所实现的接口。如果你需要在编译时知道,如果你试图包装一个不是在IDisposable
块中实现using
的类的实例的对象,编译器会对你大喊大叫。如果您需要在运行时知道,可以使用var disposable = obj as IDisposable
并检查disposable
是否为null
。
如果您有一个想要了解的特定程序集,可以使用反射来检查其类型并测试这些类型是否实现IDisposable
(使用
typeof(IDisposable).IsAssignableFrom(type)
其中type
是您从某些Type
加载的Assembly
个实例。