美文网首页
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)

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