是否有一个为using语句实现IDisposable的公共对象列表?

我想知道是否有某种备忘单,其中的对象与using语句一致… SQLConnectionMemoryStream等。

更进一步,甚至可以显示其他“拼图”,就像你应该在关闭之前使用语句括号实际调用connection.Close()一样。

这样的事情存在吗? 如果没有,也许我们应该制作一个。

Microsoft FxCop有一个规则检查您在使用块中使用IDisposbale。

也许在http://www.lancemay.com/2010/01/idisposable-cheat-sheet/上看一下我的post。 不确定这是否是您正在寻找的,但基于原始问题,听起来可能是这样。

以下C#方法将列出在某个程序集中找到的所有IDisposable类型。 (使用的名称空间: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); } 

以下C#方法使用前一个方法对目录及其子目录中的所有程序集执行相同操作,例如“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); } 

我不确定所有一次性用品的列表是否非常有用,但我使用了类似的代码来查找其他有趣的内容,例如.NET框架支持的文本编码的完整列表。

如果您不确定某个类是否实现了IDisposable ,请将其封装在using块中。 如果出现编译错误,只需将其删除即可。 你只会输入几秒钟的打字时间。

除了其他答案之外,请注意一个类可能实现IDisposable但不会在intellisense列表中出现Dispose。

 class MyClass :IDisposable { void IDisposable.Dispose() { /* Stuff */ } } 

获取实现IDisposable的类型列表的一种简单方法是破解打开Reflector,导航到System.IDisposable ,展开节点,然后展开“派生类型”节点。

为确保列表完整,请validation您正在使用的所有程序集是否已在“reflection器”中“打开”。

如果您使用的是Visual Studio,则可以在类型声明上按F12,它将带您进入元数据屏幕或类定义(如果您有源代码)。 如果您的键绑定不同,请右键单击并“转到定义”。 从那里你可以看到一个类实现了什么。 我建议你第一次遇到它们时为所有课程做这个,以便对课程的内容有“感觉”。

使用ReSharper,您可以显示所有派生类型。 也许您可以使用没有ReSharper的对象浏览器来完成它。 转到接口定义并查找“show inheritors”。

检查类型是否实现IDisposable的快速而脏的方法是创建它的实例并检查实例是否具有Dispose()成员函数。 如果确实如此,那么你可以99%确定它实现了IDisposable。