I found that the new variable was not declared properly.
You need to use the syntax DeclareLocal(typeof(T))to declare a new local var.
The updated code snippet is as follows:
Type arrayType = typeof(object[]);
Type intType = typeof(int);
DynamicMethod dm = new DynamicMethod(methodName, arrayType, new Type[] { intType });
ILGenerator il = dm.GetILGenerator();
LocalBuilder arr = il.DeclareLocal(arrayType);
il.Emit(OpCodes.Ldc_I4, 4);
il.Emit(OpCodes.Newarr, typeof(object));
il.Emit(OpCodes.Stloc, arr);
il.Emit(OpCodes.Ldloc, arr);
il.Emit(OpCodes.Ret);
return dm;
object result = dm.Invoke(null, new object[] { 1 });
: Jon Skeet :
Type arrayType = typeof(object[]);
Type intType = typeof(int);
DynamicMethod dm = new DynamicMethod(methodName, arrayType, new Type[] { intType });
ILGenerator il = dm.GetILGenerator();
LocalBuilder arr = il.DeclareLocal(arrayType);
il.Emit(OpCodes.Ldc_I4, 4);
il.Emit(OpCodes.Newarr, typeof(object));
il.Emit(OpCodes.Ret);
return dm;
object result = dm.Invoke(null, new object[] { 1 });