简体   繁体   中英

'using' block compiler generated code not visible in dotPeek or ILSpy

I am interested to look at the compiler generated code for the using code block which generates try-finally , but I do not see both dotPeek and ILSpy showing this detail. I used ildasm.exe to look at this code block and I see that it has the try-finally block in it but cannot understand it well...so wanted to see if these 2 tools would help.

Any ideas?

UPDATED: So I recently used a struct which implemented IDisposable in my project and was worried if the using code block and struct with IDisposable would cause boxing...but I later found the following article which mentioned that the compiler optimizes for this situation and does not box when trying to call Dispose.

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

So I was curious to see what kind of code does the compiler generate for my using block.

A simple example repro: 在此处输入图片说明

The free JustDecompile tool from Telerik is able to show the details.

Basically ( Test being a sample class implementing IDisposable ), the compiled version of:

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

        Console.ReadLine();
    }
}

is decompiled to:

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();
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM