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); }
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(); }
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")); } }