using System.Reflection.Emit;
public static void Main(string[] args)
var result = method.Invoke(null, new Object[]{"Test 1234", true});
Console.WriteLine(result);
public static int Test(Object[] args)
Console.WriteLine(args.Length);
public static DynamicMethod GetDM() {
var returnType = typeof(int);
var paramTypes = new Type[]{typeof(string), typeof(bool)};
var method = new DynamicMethod(
var il = method.GetILGenerator();
il.Emit(OpCodes.Ldc_I4_S, paramTypes.Length);
il.Emit(OpCodes.Newarr, typeof(Object));
for (int i = 0; i < paramTypes.Length; i++)
Type type = paramTypes[i];
il.Emit(OpCodes.Ldc_I4, i);
il.Emit(OpCodes.Ldarg, i);
if (type.IsValueType) { il.Emit(OpCodes.Box, type); }
il.Emit(OpCodes.Stelem_Ref);
var callMethod = typeof(Program).GetMethod("Test", (BindingFlags)(-1));
il.Emit(OpCodes.Call, callMethod);