Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>It seems to be a bug or unnecessary:</p> <p>I run you exemple in IL lang:</p> <pre><code>.method public hidebysig instance void InstanceMethod () cil managed { // Method begins at RVA 0x2074 // Code size 63 (0x3f) .maxstack 4 .locals init ( [0] class ConsoleApplication1.Program/Foo/'&lt;&gt;c__DisplayClass1' 'CS$&lt;&gt;8__locals2' ) IL_0000: newobj instance void ConsoleApplication1.Program/Foo/'&lt;&gt;c__DisplayClass1'::.ctor() IL_0005: stloc.0 IL_0006: ldloc.0 IL_0007: ldarg.0 IL_0008: stfld class ConsoleApplication1.Program/Foo ConsoleApplication1.Program/Foo/'&lt;&gt;c__DisplayClass1'::'&lt;&gt;4__this' //Make ref to this IL_000d: nop IL_000e: ldloc.0 IL_000f: ldc.r8 42 IL_0018: ldc.r8 1 IL_0021: call float64 [mscorlib]System.Math::Pow(float64, float64) IL_0026: stfld float64 ConsoleApplication1.Program/Foo/'&lt;&gt;c__DisplayClass1'::capturedVariable IL_002b: ldarg.0 IL_002c: ldloc.0 IL_002d: ldftn instance void ConsoleApplication1.Program/Foo/'&lt;&gt;c__DisplayClass1'::'&lt;InstanceMethod&gt;b__0'() IL_0033: newobj instance void [mscorlib]System.Action::.ctor(object, native int) IL_0038: stfld class [mscorlib]System.Action ConsoleApplication1.Program/Foo::_field IL_003d: nop IL_003e: ret } // end of method Foo::InstanceMethod </code></pre> <p>Example 2:</p> <pre><code>class Program { static void Main(string[] args) { } class Foo { private Action _field; public void InstanceMethod() { var capturedVariable = Math.Pow(42, 1); _field = () =&gt; Foo2.StaticMethod(capturedVariable); //Foo2 } private static void StaticMethod(double arg) { } } class Foo2 { internal static void StaticMethod(double arg) { } } } </code></pre> <p>in cl: (Note !! now the this reference is gone !)</p> <pre><code>public hidebysig instance void InstanceMethod () cil managed { // Method begins at RVA 0x2074 // Code size 56 (0x38) .maxstack 4 .locals init ( [0] class ConsoleApplication1.Program/Foo/'&lt;&gt;c__DisplayClass1' 'CS$&lt;&gt;8__locals2' ) IL_0000: newobj instance void ConsoleApplication1.Program/Foo/'&lt;&gt;c__DisplayClass1'::.ctor() IL_0005: stloc.0 IL_0006: nop //No this pointer IL_0007: ldloc.0 IL_0008: ldc.r8 42 IL_0011: ldc.r8 1 IL_001a: call float64 [mscorlib]System.Math::Pow(float64, float64) IL_001f: stfld float64 ConsoleApplication1.Program/Foo/'&lt;&gt;c__DisplayClass1'::capturedVariable IL_0024: ldarg.0 //No This ref IL_0025: ldloc.0 IL_0026: ldftn instance void ConsoleApplication1.Program/Foo/'&lt;&gt;c__DisplayClass1'::'&lt;InstanceMethod&gt;b__0'() IL_002c: newobj instance void [mscorlib]System.Action::.ctor(object, native int) IL_0031: stfld class [mscorlib]System.Action ConsoleApplication1.Program/Foo::_field IL_0036: nop IL_0037: ret } </code></pre> <p>Exemple 3:</p> <pre><code>class Program { static void Main(string[] args) { } static void Test(double arg) { } class Foo { private Action _field; public void InstanceMethod() { var capturedVariable = Math.Pow(42, 1); _field = () =&gt; Test(capturedVariable); } private static void StaticMethod(double arg) { } } } </code></pre> <p>in IL: (This pointer is back)</p> <pre><code>IL_0006: ldloc.0 IL_0007: ldarg.0 IL_0008: stfld class ConsoleApplication1.Program/Foo ConsoleApplication1.Program/Foo/'&lt;&gt;c__DisplayClass1'::'&lt;&gt;4__this' //Back again. </code></pre> <p>And in all three cases the method-b__0() - look the same:</p> <pre><code>instance void '&lt;InstanceMethod&gt;b__0' () cil managed { // Method begins at RVA 0x2066 // Code size 13 (0xd) .maxstack 8 IL_0000: ldarg.0 IL_0001: ldfld float64 ConsoleApplication1.Program/Foo/'&lt;&gt;c__DisplayClass1'::capturedVariable IL_0006: call void ConsoleApplication1.Program/Foo::StaticMethod(float64) //Your example IL_0006: call void ConsoleApplication1.Program/Foo2::StaticMethod(float64)//Example 2 IL_0006: call void ConsoleApplication1.Program::Test(float64) //Example 3 IL_000b: nop IL_000c: ret } </code></pre> <p>And in all 3 cases there is an reference to an static method, so it makes it more odd. So after this litle analys, i will say its an bug / for no good. !</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload