private LocalBuilder Imitate(Object obj, ILGenerator il) { var type = obj.GetType(); var bldr = Construct(type, il); var node = new ValueNode(obj); var props = _objectManipulator.GetPropertyResults(node, _settings); foreach (var prop in props) { LocalBuilder?liveLocal = null; switch (prop.Value) { case String str: il.Emit(OpCodes.Ldstr, str); liveLocal = il.DeclareLocal(typeof(String)); break; case Int32 i32: il.Emit(OpCodes.Ldind_I4, i32); liveLocal = il.DeclareLocal(typeof(Int32)); break; } if (liveLocal != null) { il.Emit(OpCodes.Stloc, liveLocal); SetPropertyValue(bldr, prop, liveLocal, il); } } return(bldr); }