C# 表达式树 (1)

系列文章: C# 表达式树及其应用 (Expression 类)

本节继续讲解Expression相关的API, 力争把相关api 都使用简短demo说明一下

  • Add(Expression, Expression) 创建一个表示不进行溢出检查的算术加法运算的
public class Plus
{
    //下面表达式指定加法的实现
    public static int AddOne(int a, int b)
    {
        return a + b + 1;
    }
}
//Add(Expression, Expression)    创建一个表示不进行溢出检查的算术加法运算的 BinaryExpression。
    void AddSample()
    {
        Expression sumExpr = Expression.Add(Expression.Constant(1), Expression.Constant(2));
        Console.WriteLine(sumExpr.ToString());//(1+2)
        Console.WriteLine(Expression.Lambda>(sumExpr).Compile()());//3
        Expression sumExpr2 = Expression.Add(Expression.Constant(1), Expression.Constant(2), typeof(Plus).GetMethod("AddOne"));
        Console.WriteLine(sumExpr2.ToString());
        Console.WriteLine(Expression.Lambda>(sumExpr2).Compile()());
    }
    AddSample();
  • AddAssign(Expression, Expression) 创建一个表示不进行溢出检查的加法赋值运算的 BinaryExpression
    //AddAssign(Expression, Expression) 创建一个表示不进行溢出检查的加法赋值运算的 BinaryExpression
    void AddAssignSample()
    {
        ParameterExpression variableExpr = Expression.Variable(typeof(int), "sampleVar");//the parameter expression is used to create a variable;
        BlockExpression addAssignExpr = Expression.Block(
        new ParameterExpression[] { variableExpr },
        Expression.Assign(variableExpr, Expression.Constant(1)),
        Expression.AddAssign(
            variableExpr,
            Expression.Constant(2)
            )
        );
        addAssignExpr.Expressions.ForEach(p => p.ToString().Dump());//(sampleVar = 1),(sampleVar +=2)
        Console.WriteLine(Expression.Lambda>(addAssignExpr).Compile()());//3
    }
    AddAssignSample();
  • AddAssign(Expression, Expression, MethodInfo) 创建一个表示不进行溢出检查的加法赋值运算的 BinaryExpression。可指定实现
    //AddAssign(Expression, Expression, MethodInfo)  创建一个表示不进行溢出检查的加法赋值运算的 BinaryExpression。可指定实现
    //参Add(Expression, Expression, MethodInfo)

    //AddAssign(Expression, Expression, MethodInfo, LambdaExpression) 创建一个表示不进行溢出检查的加法赋值运算的 BinaryExpression。可指定实现, 可指定类型转换函数

  • AddAssignChecked(Expression, Expression) 创建一个表示进行溢出检查的加法赋值运算的 BinaryExpression。
    //AddAssignChecked(Expression, Expression)    创建一个表示进行溢出检查的加法赋值运算的 BinaryExpression。
    void AddAssignCheckedSample()
    {
        ParameterExpression variableExprWithChecked = Expression.Variable(typeof(int), "sampleVar");//the parameter expression is used to create a variable;
        BlockExpression addAssignExprWithChecked = Expression.Block(
        new ParameterExpression[] { variableExprWithChecked },
        Expression.Assign(variableExprWithChecked, Expression.Constant(2147483647)),
        Expression.AddAssign(
            variableExprWithChecked,
            Expression.Constant(1)
            )
        );
        addAssignExprWithChecked.Expressions.ForEach(p => p.ToString().Dump());//(sampleVar = 2147483647),(sampleVar +=1)
        Console.WriteLine(Expression.Lambda>(addAssignExprWithChecked).Compile()());//-2147483648
    }
    AddAssignCheckedSample();

    //AddChecked(Expression, Expression)    创建一个表示进行溢出检查的算术加法运算的 BinaryExpression。
    //同Add

本文作者:wwmin
微信公众号: DotNet技术说
本文链接:https://www.jianshu.com/p/e8dc272b7bf4
关于博主:评论和私信会在第一时间回复。或者[直接私信]我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,关注点赞, 您的鼓励是博主的最大动力!

你可能感兴趣的:(C# 表达式树 (1))