美文网首页
C# 表达式树 (14)

C# 表达式树 (14)

作者: wwmin_ | 来源:发表于2021-02-05 18:44 被阅读0次

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

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

  • PostDecrementAssign 创建一个 UnaryExpression,它表示将原始表达式递减 1 之后再进行表达式赋值。
    //PostDecrementAssign    创建一个 UnaryExpression,它表示将原始表达式递减 1 之后再进行表达式赋值。
    void PostDecrementAssignSample()
    {
        ParameterExpression variableExpr = Expression.Variable(typeof(int), "sampleVar");
        BlockExpression block = Expression.Block(
            new ParameterExpression[] { variableExpr },
            Expression.PostDecrementAssign(variableExpr),
            Expression.PostDecrementAssign(variableExpr)
        );
        block.Expressions.ForEach(p => p.ToString().Dump());//sampleVar--  | sampleVar--
        Expression.Lambda<Func<int>>(block).Compile()().Dump("PostDecrementAssign");//-1
    }
    PostDecrementAssignSample();

    //PostIncrementAssign    创建一个 UnaryExpression,它表示将原始表达式递增 1 之后再进行表达式赋值。同PostDecrementAssign

  • Power 创建一个表示对数进行幂运算的 BinaryExpression。
    //Power   创建一个表示对数进行幂运算的 BinaryExpression。
    void PowerSample()
    {
        var powerExpr = Expression.Power(Expression.Constant(2d), Expression.Constant(2d));
        powerExpr.ToString().Dump("PowerExpr");//(2**2)
        Expression.Lambda<Func<double>>(powerExpr).Compile()().Dump("Power");//2
    }
    PowerSample();
    //PowerAssign  创建一个 BinaryExpression,它表示对表达式求幂并将结果赋回给表达式。  同AddAssign

    //PreDecrementAssign    创建一个 UnaryExpression,它将表达式递减 1 并将结果赋回给表达式。同PostDecrementAssign

    //PreIncrementAssign    创建一个 UnaryExpression,它将表达式递增 1 并将结果赋回给表达式。同PostDecrementAssign
  • Property 创建一个表示访问属性的 MemberExpression。
    //Property   创建一个表示访问属性的 MemberExpression。
    void PropertySample()
    {
        TestBindMember obj = new TestBindMember();
        obj.Num = 10;//定义class时, 带有{get;set;}的是属性, 不带的是字段
        Expression propertyExpr = Expression.Property(
            Expression.Constant(obj),
            "Num"
        );
        Expression.Lambda<Func<int>>(propertyExpr).Compile()().Dump("Property");//10
    }
    PropertySample();
  • PropertyOrField 创建一个表示访问属性或字段的 MemberExpression。
    //PropertyOrField   创建一个表示访问属性或字段的 MemberExpression。
    void PropertyOrFieldSample()
    {
        TestFieldClass obj = new TestFieldClass();
        obj.num = 10;//定义class时, 带有{get;set;}的是属性, 不带的是字段
        Expression propertyExpr = Expression.PropertyOrField(
            Expression.Constant(obj),
            "num"
        );
        Expression.Lambda<Func<int>>(propertyExpr).Compile()().Dump("PropertyOrField");//10
    }
    PropertyOrFieldSample();
  • Quote [引用] 创建一个表示具有类型 UnaryExpression 的常量值的表达式的 Expression。
    //Quote  [引用] 创建一个表示具有类型 UnaryExpression 的常量值的表达式的 Expression。
    void QuoteSample()
    {
        TestFieldClass obj = new TestFieldClass();
        obj.num = 10;//定义class时, 带有{get;set;}的是属性, 不带的是字段
        Expression propertyExpr = Expression.PropertyOrField(
            Expression.Constant(obj),
            "num"
        );

        var lambda = Expression.Lambda<Func<int>>(propertyExpr);
        var res = lambda.Compile()().Dump();
        Expression quote = Expression.Quote(lambda);
        quote.ToString().Dump();//() => value(UserQuery+TestFieldClass).num
    }
    QuoteSample();

    //Reduce   将此节点简化为更简单的表达式。 如果 CanReduce 返回 true,则它应返回有效的表达式。 此方法可以返回本身必须简化的另一个节点。//TODO

    //ReduceAndCheck  同Reduce

    //ReduceExtensions   将表达式简化为已知节点类型(即非 Extension 节点)或仅在此类型为已知类型时返回表达式。//TODO

    //ReferenceEqual    创建一个表示引用相等比较的 BinaryExpression。//TODO

    //ReferenceNotEqual   同ReferenceEqual

    //Rethrow   创建一个 UnaryExpression,它表示重新引发异常。//TODO

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

相关文章

  • C# 表达式树 (14)

    系列文章: C# 表达式树及其应用 (Expression 类)[https://www.jianshu.com/...

  • C# 表达式树 (3)

    系列文章: C# 表达式树及其应用 (Expression 类)[https://www.jianshu.com/...

  • C# 表达式树 (6)

    系列文章: C# 表达式树及其应用 (Expression 类)[https://www.jianshu.com/...

  • C# 表达式树 (2)

    系列文章: C# 表达式树及其应用 (Expression 类)[https://www.jianshu.com/...

  • C# 表达式树 (1)

    系列文章: C# 表达式树及其应用 (Expression 类)[https://www.jianshu.com/...

  • C# 表达式树 (4)

    系列文章: C# 表达式树及其应用 (Expression 类)[https://www.jianshu.com/...

  • C# 表达式树 (5)

    系列文章: C# 表达式树及其应用 (Expression 类)[https://www.jianshu.com/...

  • C# 表达式树 (7)

    系列文章: C# 表达式树及其应用 (Expression 类)[https://www.jianshu.com/...

  • C# 表达式树 (9)

    系列文章: C# 表达式树及其应用 (Expression 类)[https://www.jianshu.com/...

  • C# 表达式树 (12)

    系列文章: C# 表达式树及其应用 (Expression 类)[https://www.jianshu.com/...

网友评论

      本文标题:C# 表达式树 (14)

      本文链接:https://www.haomeiwen.com/subject/ntegtltx.html