[英]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.