Reflector IL to C# Bug

I was watching Entity Framework code when I found this code:


switch (this.<>1__state)
{
    case 3:
    case 4:
        break;

    default:
        return;
        try
        {
        }
        finally
        {
            this.<A title="void System.Data.EntityModel.SchemaObjectModel.EntityContainerAssociationSet+d__0.m__Finally6();” href=”http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System.Data.Entity:3.5.0.0:b77a5c561934e089/System.Data.EntityModel.SchemaObjectModel.EntityContainerAssociationSet.d__0/m__Finally6()”><>m__Finally6();
        }
        break;
}


Very strange. It was the same with VB.Net. So I watched IL and I undestood that Reflector has a bug.


Indeed the IL was next:


L_0023: ldfld int32 System.Data.EntityModel.SchemaObjectModel.EntityContainerAssociationSet/<get_Ends>d__0::<>1__state
L_0028: stloc.1
L_0029: ldloc.1
L_002a: ldc.i4.3
L_002b: sub
L_002c: switch (L_003a, L_003a)
L_0039: ret
L_003a: leave.s L_0043
L_003c: ldarg.0
L_003d: call instance void System.Data.EntityModel.SchemaObjectModel.EntityContainerAssociationSet/<get_Ends>d__0::<>m__Finally6()
L_0042: endfinally
L_0043: ret
.try L_003a to L_003c finally handler L_003c to L_0043


So C# code should be:


switch (this.<>1__state)
{
    case 3:
    case 4:
        try
        {
        }
        finally
        {
            this.<A title="void System.Data.EntityModel.SchemaObjectModel.EntityContainerAssociationSet+d__0.m__Finally6();” href=”http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System.Data.Entity:3.5.0.0:b77a5c561934e089/System.Data.EntityModel.SchemaObjectModel.EntityContainerAssociationSet.d__0/m__Finally6()”><>m__Finally6();
        }
        break;
    default:
        return;
}

This entry was posted in 7671, 7672, 7673, 7678, 7806. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>