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

C# 表达式树 (13)

作者: wwmin_ | 来源:发表于2021-02-04 22:09 被阅读0次

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

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

  • Multiply 创建一个表示不进行溢出检查的算术乘法运算的 BinaryExpression。
//Or  创建一个表示按位 BinaryExpression 运算的 OR。
    void OrSample()
    {
        Expression orExpr = Expression.Or(Expression.Constant(true), Expression.Constant(false));
        orExpr.ToString().Dump("OrExpr");//(True Or False)
        Expression.Lambda<Func<bool>>(orExpr).Compile()().Dump("Or");//True
    }
    OrSample();
  • OrAssign 创建一个表示按位 OR 赋值运算的 BinaryExpression。
    //OrAssign   创建一个表示按位 OR 赋值运算的 BinaryExpression。
    void OrAssignSample()
    {
        ParameterExpression variableExpr = Expression.Variable(typeof(bool), "sampleVar");
        BlockExpression block = Expression.Block(
            new ParameterExpression[] { variableExpr },
            Expression.Assign(variableExpr, Expression.Constant(true)),
            Expression.OrAssign(
                variableExpr,
                Expression.Constant(false)
            )
        );
        block.Expressions.ForEach(p => p.ToString().Dump());//(sampleVar = True)  | (sampleVar ||= False)
        Expression.Lambda<Func<bool>>(block).Compile()().Dump("OrAssign 按位Or赋值运算");//True
    }
    OrAssignSample();
  • OrElse 创建一个 BinaryExpression,它表示仅在第一个操作数的计算结果为 OR 时才计算第二个操作数的条件 false 运算。
    //OrElse    创建一个 BinaryExpression,它表示仅在第一个操作数的计算结果为 OR 时才计算第二个操作数的条件 false 运算。
    void OrElseSample()
    {
        Expression orElseExpr = Expression.OrElse(
                Expression.Constant(false),
                Expression.Constant(true)
        );
        orElseExpr.ToString().Dump("OrElse");//(False OrElse True)
        Expression.Lambda<Func<bool>>(orElseExpr).Compile().Invoke().Dump("OrElse");//true
    }
    OrElseSample();
  • Parameter 创建一个 ParameterExpression 节点,该节点可用于标识表达式树中的参数或变量。
    //Parameter   创建一个 ParameterExpression 节点,该节点可用于标识表达式树中的参数或变量。
    void ParameterSample()
    {
        ParameterExpression param = Expression.Parameter(typeof(int));
        MethodCallExpression methodCall = Expression.Call(
            typeof(Console).GetMethod("WriteLine", new Type[] { typeof(int) })!,
            param
        );
        Expression.Lambda<Action<int>>(
            methodCall,
            new ParameterExpression[] { param }
        ).Compile()(10);//10
    }
    ParameterSample();

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

相关文章

  • C# 表达式树 (13)

    系列文章: 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# 表达式树 (14)

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

网友评论

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

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