在编码器生产率方面,VS 2005或2008中最快的方式是确定Foo是否实现IDisposable。我不止一次遇到过这样的情况:我遇到了一个没有using
块的类型,因为它从来没有发现我需要实现IDisposable。
答案 0 :(得分:8)
将它放在using语句中,看它是否编译:
using (var x = new TypeInQuestion(params)) {}
如果TypeInQuestion
未实现IDisposable,则无法编译。
另一种最快的方法是使用ReSharper,单击变量(在这种情况下为x
),并查看是否有建议将其放入using语句中。
答案 1 :(得分:6)
如果您有ReSharper,请突出显示变量,等待灯泡,然后按Alt + Enter。如果其中一个选项是“使用''换行”,则它是IDisposable。
答案 2 :(得分:1)
不幸的是,没有“简单简单”的方式。
你将不得不在类名上点击F12,然后继续在基类上点击F12,直到你进入基类,如果其中任何一个实现IDisposable,你就得到了它。
答案 3 :(得分:1)
如果类型与IO,窗口/控件或图形有关,我通常会将其视为我应该寻找Dispose方法的提示。
此外,'Close'方法的存在可能意味着该类型是一次性的,例如,如果您有对XmlReader(IDisposable)的引用,则无法看到Dispose方法,因为它是显式实现的。 / p>
答案 4 :(得分:1)
对我来说,最快捷的方法通常是为类型的实例键入一个使用块(使用片段),在这种情况下,如果类型没有实现IDisposable,您将收到错误通知。这通常只需要几秒钟。不是很方便,而是很快。
答案 5 :(得分:1)
在最新的IDE中,如果我有任何关于某些东西是否实现IDisposible的问题,我将它放在一个使用块中。在您完成下一行代码之前,IDE会告诉您这是否不正确。
答案 6 :(得分:1)
您可以在PowerShell中执行此操作,例如
[System.Management.Automation.Runspaces.pipeline].getinterface("IDisposable")
返回
IsPublic IsSerial Name BaseType -------- -------- ---- -------- True False IDisposable
,而
[datetime].getinterface("IDisposable")
什么都不返回。
答案 7 :(得分:1)
在Visual Studio中安装了ReSharper插件,当您将光标放在变量声明上时,如下面代码段中的stringWriter:
TextWriter writer = new StringWriter();
writer.WriteLine("Test");
您可以从“灯泡”菜单中选择“使用'构建'”,这会将上面的代码段变为:
using (TextWriter writer = new StringWriter()) {
writer.WriteLine("Test");
}
如果没有“put into ...”选项,则该类型不实现IDisposable。
答案 8 :(得分:0)
开始输入并查看intellisense是否选择.Dispose方法
(根据评论,快速而且非常脏)
答案 9 :(得分:-1)
它不是很快,但你也可以运行FXCop,它会提醒你那些IDisposable不在using()块中的对象。
在工作中处理一些遗留的C#代码,我发现无论是谁创建它实际上都是一个“.Dispose()”方法几乎是每个类,即使不需要,但这些类实际上并没有实现IDisposable。这意味着在intellisence他们都有一个Dispose()方法,但不能放入using()块...非常讨厌!