我有興趣查看using
代碼塊的編譯器生成代碼,它生成try-finally
,但我沒有看到dotPeek
和ILSpy
顯示此詳細信息。我使用ildasm.exe
來看看這個代碼塊,我發現它有try-finally
塊,但不能很好地理解它......所以想看看這兩個工具是否會有所幫助。'使用'block編譯器生成的代碼在dotPeek或ILSpy中不可見
任何想法?
更新: 所以我最近使用它實現了IDisposable在我的項目,很擔心如果using
代碼塊和結構與IDisposable的會導致拳擊結構...但我後來發現其中提到了下面的文章編譯器會針對這種情況進行優化,並且在嘗試調用Dispose時不會進行填充。
http://ericlippert.com/2011/03/14/to-box-or-not-to-box/
所以我很好奇,想看看它的編譯器爲我用塊什麼樣的代碼。
張貼一些示例反編譯的代碼! –
ILSpy(我也猜測dotPeek)會識別編譯器生成的'using'語句擴展並將其反轉回'using'語句。 –
如果你想知道IL,請看[這裏](http://weblogs.asp.net/kennykerr/introduction-to-msil-part-5-exception-handling)。一個MSIL指令將沿'.try L_000b到L_001d最後處理程序L_001d到L_0027'的行生成,同時還有一個類似'leave.s L_0027'的指令。 –