簡體   English   中英

編碼什么是確定類型是否是IDisposable的最快方法

[英]while coding what's the quickest way to determine if a type is IDisposable

在編碼器生產率方面,VS 2005或2008中最快的方式是確定Foo是否實現IDisposable。 我不止一次發生過這樣的情況,我發現我使用的是沒有using塊的類型,因為它從來沒有發生過我需要實現IDisposable的東西。

將它放在using語句中,看它是否編譯:

using (var x = new TypeInQuestion(params)) {}

如果TypeInQuestion沒有實現IDisposable,則不會編譯。

另一種最快的方法是使用ReSharper,單擊變量(在本例中為x ),並查看是否有建議將其放入using語句中。

如果您有ReSharper ,請突出顯示該變量,等待燈泡,然后按Alt + Enter。 如果其中一個選項是“使用''換行”,則它是IDisposable。

不幸的是,沒有“簡單簡單”的方式。

你將不得不在類名上按F12,然后在基類上繼續按F12,直到你進入基類,如果其中任何一個實現了IDisposable,你就得到了它。

如果類型與IO,窗口/控件或圖形有關,我通常會將其作為提示,我應該尋找Dispose方法。

此外,'Close'方法的存在可能意味着該類型是一次性的,例如,如果您有對XmlReader(IDisposable)的引用,則您無法看到Dispose方法,因為它是顯式實現的。

對我來說,最快捷的方法通常是為類型的實例鍵入一個使用塊(使用片段),在這種情況下,如果類型沒有實現IDisposable,您將收到錯誤通知。 這通常只需要幾秒鍾。 不是很方便,而是很快。

在最新的IDE中,如果我有任何問題,如果某些東西實現了IDisposible,我把它放在一個使用塊中。 在您完成下一行代碼之前,IDE會告訴您這是否不正確。

您可以在PowerShell中執行此操作,例如

[System.Management.Automation.Runspaces.pipeline].getinterface("IDisposable")

回報

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    IDisposable

[datetime].getinterface("IDisposable")

沒有回報。

使用Visual Studio中安裝的ReSharper插件,當您將光標放在變量聲明上時,如下面代碼段中的stringWriter:

TextWriter writer = new StringWriter();
writer.WriteLine("Test");

您可以從“燈泡”菜單中選擇“投入使用'構造”,這會將上面的代碼段轉換為:

using (TextWriter writer = new StringWriter()) {
    writer.WriteLine("Test");
}

如果沒有“put into ...”選項,則該類型不實現IDisposable。

開始輸入並查看intellisense是否選擇.Dispose方法

(根據評論,很快,(非常)臟)

它不是很快,但你也可以運行FXCop,它會提醒你在using()塊中不存在IDisposable的對象。

在工作中處理一些遺留的C#代碼,我發現無論是誰創建它實際上是一個“.Dispose()”方法幾乎是每個類,即使不需要,但這些類實際上並沒有實現IDisposable。 這意味着在intellisence他們都有一個Dispose()方法,但不能放入using()塊...非常煩人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM