I'm a bit new to this IL stuff and am stumped.

Can someone tell me why this code throws an exception? (Or, more
importantly, how I can fix it such that it simply gets the value of
Weird and outputs that value (5) to the console).

using System;
using System.Reflection;
using System.Reflection.Emit;

namespace Test
{
        public class Test
        {
                static void Main(string[] args)
                {
                        PropertyInfo pi = typeof(Test).GetProperty("Weird");

                        DynamicMethod dm = new DynamicMethod("hi", typeof(int), 
null, typeof
(Test));
                        ILGenerator gen = dm.GetILGenerator();

                        gen.Emit(OpCodes.Ldarg_0);
                        gen.Emit(OpCodes.Call, pi.GetGetMethod());
                        gen.Emit(OpCodes.Box, typeof(int));
                        gen.Emit(OpCodes.Pop);

                        gen.Emit(OpCodes.Ret);

                        Test t = new Test {Weird = 5};

                        object invoke = dm.Invoke(t, null);

                        Console.WriteLine(invoke);

                        Console.ReadLine();
                }

                public int Weird { get; set; }
        }
}

Reply via email to