Assignment in .NET 3.5 expression trees

后端 未结 5 913
执笔经年
执笔经年 2020-12-16 01:39

Is it possible to encode an assignment into an expression tree?

5条回答
  •  醉梦人生
    2020-12-16 01:51

    You should able to do it with .NET 4.0 Library. by import Microsoft.Scripting.Core.dll to your .NET 3.5 project.

    I am using DLR 0.9 - There might be some change on Expession.Block and Expression.Scope in version 1.0 (You can see reference from http://www.codeplex.com/dlr/Thread/View.aspx?ThreadId=43234)

    Following sample is to show you.

    using System;
    using System.Collections.Generic;
    using Microsoft.Scripting.Ast;
    using Microsoft.Linq.Expressions;
    using System.Reflection;
    
    namespace dlr_sample
    {
        class Program
        {
            static void Main(string[] args)
            {
                List statements = new List();
    
                ParameterExpression x = Expression.Variable(typeof(int), "r");
                ParameterExpression y = Expression.Variable(typeof(int), "y");
    
                statements.Add(
                    Expression.Assign(
                        x,
                        Expression.Constant(1)
                    )
                 );
    
                statements.Add(
                    Expression.Assign(
                        y,
                        x
                    )
                 );
    
                MethodInfo cw = typeof(Console).GetMethod("WriteLine", new Type[] { typeof(int) });
    
                statements.Add(
                    Expression.Call(
                        cw,
                        y
                    )
                );
    
                LambdaExpression lambda = Expression.Lambda(Expression.Scope(Expression.Block(statements), x, y));
    
                lambda.Compile().DynamicInvoke();
                Console.ReadLine();
            }
        }
    }
    

提交回复
热议问题