Beispiel #1
0
        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);
        }