Beispiel #1
0
        private static void bench()
        {
            var sw = Stopwatch.StartNew();

            for (var i = 0; i < 5_000_000; i++)
            {
                //Expression<Func<string, string, int>> exp = (x, y) => x.Length + y.Length;
                //exp.Compile()("a", "b");

                //Func<string, string, int> foo = (x, y) => x.Length + y.Length;
                //foo("a", "b");

                //new Context().Eval("(x,y) => x.length + y.length").As<Function>().Call(new Arguments { "a", "b" });

                Expression <Func <string, string, long> > exp = (x, y) => x.Length + y.Length;
                var serializer   = new ExpressionSerializer();
                var deserializer = new ExpressionDeserializer();
                var serialized   = serializer.Serialize(exp);
                var deserialized = (LambdaExpression)deserializer.Deserialize(serialized);
                var value        = new ExpressionEvaluator().Eval(deserialized.Body,
                                                                  new[] {
                    new Parameter(deserialized.Parameters[0], "a"),
                    new Parameter(deserialized.Parameters[1], "b"),
                });
            }

            sw.Stop();
            Console.WriteLine(sw.Elapsed);
        }
        public void ExternalTypesSerialization()
        {
            var serializer = new ExpressionSerializer();
            var deserializer = new ExpressionDeserializer();
            var list = new List<int>();
            Expression<Func<List<int>, int>> expression = l => l.Count;

            var serialized = serializer.Serialize(expression);

            var deserialized = deserializer.Deserialize(serialized);
        }
Beispiel #3
0
        static void Main(string[] args)
        {
            //hubsTest();
            //return;

            //experiments();
            //return;

            var f = new Func <int, int, int>((x, y) => x + y);

            //var invokeMethod = f.Invoke();

            return;

            //var a = 2;
            //var b = 2;
            //var c = 2;
            var prmA = Expression.Parameter(typeof(SomeObject), "obj");
            var prmB = Expression.Parameter(typeof(string), "b");
            var prmC = Expression.Parameter(typeof(long), "c");
            var obj  = new SomeObject();
            Expression <Func <long> > exp = () => 1;

            var body2 = Expression.Block(Expression.Assign(Expression.PropertyOrField(prmA, nameof(SomeObject.Property)), Expression.Constant(1)));

            var serializer   = new ExpressionSerializer();
            var deserializer = new ExpressionDeserializer();
            var serialized   = serializer.Serialize(exp);
            var deserialized = (LambdaExpression)deserializer.Deserialize(serialized);

            var prms = new[] {
                new Parameter(prmA, obj),
            };
            // var value = new ExpressionEvaluator().Eval(deserialized.Body, prms);
            var value = new ExpressionEvaluator().Eval(body2, prms);

            //bench();
        }
Beispiel #4
0
        public void TestMethod1()
        {
            Expression <Func <string, bool> > exp = s => s.Contains("a");
            //aa
            var p1 = ((MethodCallExpression)exp.Body).Object;

            var gsdfgdsf = ReferenceEquals(exp.Parameters[0], p1);

            var serializer   = new ExpressionSerializer();
            var deserializer = new ExpressionDeserializer();

            using (var stream = new MemoryStream(1000))
            {
                serializer.Serialize(exp, stream);
                stream.Position = 0;

                Expression <Func <string, bool> > exp2 = deserializer.Deserialize <Expression <Func <string, bool> > >(stream);
                var func = exp2.Compile();

                Assert.IsTrue(func("sab"));
                Assert.IsFalse(func("qqq"));
            }
        }