0

usingを生成するコード ブロックのコンパイラ生成コードを調べたいと思っていますが、両方とも表示されtry-finallyておらず、この詳細も表示されていません。私はこのコード ブロックをよく見ていましたが、ブロックが含まれていることがわかりましたが、よく理解できません。これら 2 つのツールが役立つかどうかを確認したかったのです。dotPeekILSpyildasm.exetry-finally

何か案は?

更新: そのため、最近、プロジェクトで IDisposable を実装した構造体を使用し、usingコード ブロックと IDisposable を含む構造体がボクシングを引き起こすかどうか心配していました...しかし、後で、コンパイラがこの状況に最適化され、最適化されないことを述べた次の記事を見つけました。 Dispose を呼び出そうとすると、ボックスが表示されます。

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

そのため、コンパイラが using ブロックに対してどのようなコードを生成するかを知りたいと思っていました。

簡単な再現例: ここに画像の説明を入力

4

1 に答える 1

1

Telerikの無料のJustDecompile ツールを使用すると、詳細を表示できます。

基本的に(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();
    }
}
于 2015-10-28T13:10:49.737 に答える