public void InvokeActionConstantIsSupportedSimpleStruct()
        {
            var refValueArg = Parameter(typeof(SimplePersonStruct).MakeByRefType(), "value");

            void AssigningRefs(ref SimplePersonStruct value) => value.Health = 5;

            var lambda = Lambda <DeserializeDelegateSimple <SimplePersonStruct> >(
                Assign(PropertyOrField(refValueArg, nameof(SimplePersonStruct.Health)), Constant(5)),
                refValueArg);

            void LocalAssert(DeserializeDelegateSimple <SimplePersonStruct> invoke)
            {
                var person = new SimplePersonStruct {
                    Health = 1
                };

                invoke(ref person);
                Assert.AreEqual(5, person.Health);
            }

            LocalAssert(AssigningRefs);

            Assert.DoesNotThrow(() => lambda.CompileSys());

            var funcFast = lambda.CompileFast(true);

            LocalAssert(funcFast);
        }
示例#2
0
        protected override string RunSimpleStructTest()
        {
            var o = new SimplePersonStruct
            {
                Name    = "Name",
                Surname = "Surname"
            };

            using (Stream s = new MemoryStream()) {
                var formatter = new BinaryFormatter();
                formatter.Serialize(s, o);
                return($"{s.Length:N2} bytes");
            }
        }
 private SimplePersonStruct SimplePersonPass(SimplePersonStruct person)
 {
     return(person);
 }