ig.Emit (OpCodes.Ldc_I4, index);
ig.Emit (OpCodes.Ldelem, typeof (object));
- var type = typeof (StrongBox<>).MakeGenericType (global.GetType ());
+ var type = global.GetType ().MakeStrongBoxType ();
ig.Emit (OpCodes.Isinst, type);
ig.Emit (OpCodes.Ldfld, type.GetField ("Value"));
globals.Add (CreateStrongBox (value));
}
- static IStrongBox CreateStrongBox (object value)
+ static object CreateStrongBox (object value)
{
- return (IStrongBox) Activator.CreateInstance (
- typeof (StrongBox<>).MakeGenericType (value.GetType ()), value);
+ return Activator.CreateInstance (
+ value.GetType ().MakeStrongBoxType (), value);
}
}
using System;
using System.Reflection;
using System.Reflection.Emit;
+using System.Runtime.CompilerServices;
namespace System.Linq.Expressions {
throw new ArgumentException ();
}
}
+
+ public static Type MakeStrongBoxType (this Type self)
+ {
+ return typeof (StrongBox<>).MakeGenericType (self);
+ }
}
}