'使用'块编译器生成的代码在dotPeek或ILSpy中不可见

时间:2015-10-28 13:01:05

标签: c# ilspy dotpeek

我有兴趣查看生成using的{​​{1}}代码块的编译器生成代码,但我没有看到显示此详细信息的try-finallydotPeek 。我使用ILSpy来查看此代码块,我发现它中有ildasm.exe块但无法理解它...所以想看看这两个工具是否有用。

有什么想法吗?

更新: 所以我最近在我的项目中使用了一个实现了IDisposable的结构,并担心try-finally代码块和带有IDisposable的结构会导致装箱...但后来我发现下面的文章提到编译器针对这种情况进行了优化并且在尝试调用Dispose时不会显示框。

http://ericlippert.com/2011/03/14/to-box-or-not-to-box/

所以我很想知道编译器为我的using块生成了什么样的代码。

一个简单的例子: enter image description here

1 个答案:

答案 0 :(得分:1)

免费JustDecompile tool from Telerik可以显示详细信息。

基本上(Test是实现IDisposable的示例类),编译版本:

internal class Program
{
    private static void Main(string[] args)
    {
        using (var test = new Test())
        {
            test.Foo();
        }

        Console.ReadLine();
    }
}

被反编译为:

internal class Program
{
    public Program()
    {
    }

    private static void Main(string[] args)
    {
        Test test = new Test();
        try
        {
            test.Foo();
        }
        finally
        {
            if (test != null)
            {
                ((IDisposable)test).Dispose();
            }
        }
        Console.ReadLine();
    }
}