编码什么是确定类型是否是IDisposable的最快方法

时间:2009-06-04 13:55:32

标签: c# visual-studio

在编码器生产率方面,VS 2005或2008中最快的方式是确定Foo是否实现IDisposable。我不止一次遇到过这样的情况:我遇到了一个没有using块的类型,因为它从来没有发现我需要实现IDisposable。

10 个答案:

答案 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()块...非常讨厌!