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

C# 表达式树 (8)

作者: wwmin_ | 来源:发表于2021-01-30 18:01 被阅读0次

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

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

    • IfThen 创建一个 ConditionalExpression,它表示带 if 语句的条件块。
    //IfThen     创建一个 ConditionalExpression,它表示带 if 语句的条件块。
        void IfThenSample()
        {
            bool test = true;
            Expression ifThenExpr = Expression.IfThen(Expression.Constant(test),
                                        Expression.Call(
                                            null,
                                            typeof(Console).GetMethod("WriteLine", new Type[] { typeof(String) })!,
                                            Expression.Constant("The condition is true.")
                                            )
                                     );
            Expression.Lambda<Action>(ifThenExpr).Compile()();//The condition is true.
        }
        IfThenSample();
    
    • IfThenElse 创建一个 ConditionalExpression,它表示带 if 和 else 语句的条件块。
        //IfThenElse   创建一个 ConditionalExpression,它表示带 if 和 else 语句的条件块。
        void IfThenElseSample()
        {
            bool test = false;
            Expression ifThenElseExpr = Expression.IfThenElse(
                Expression.Constant(test),
                Expression.Call(
                    null,
                    typeof(Console).GetMethod("WriteLine", new Type[] { typeof(String) })!,
                    Expression.Constant("The condition is true.")
                ),
                Expression.Call(
                    null,
                    typeof(Console).GetMethod("WriteLine", new Type[] { typeof(String) })!,
                    Expression.Constant("The condition is false.")
                )
            );
            Expression.Lambda<Action>(ifThenElseExpr).Compile()();//The condition is false.
        }
        IfThenElseSample();
    
    • Increment (同Decrement) 创建一个 UnaryExpression,它表示按 1 递增表达式值。
        //Increment (同Decrement) 创建一个 UnaryExpression,它表示按 1 递增表达式值。 
    
    • Invoke 创建 InvocationExpression。
        //Invoke  创建 InvocationExpression。
        void InvokeSample()
        {
            //下面的示例演示如何使用 Invoke(Expression, Expression[]) 方法创建一个 InvocationExpression ,该对象表示调用具有指定自变量的 lambda 表达式。
            Expression<Func<int, int, bool>> largeSumTest = (num1, num2) => (num1 + num2) > 1000;
            InvocationExpression invocationExpression = Expression.Invoke(largeSumTest, Expression.Constant(100), Expression.Constant(900));
            invocationExpression.ToString().Dump();//Invoke((num1, num2) => ((num1 + num2) > 1000), 100, 900)
        }
        InvokeSample();
    
        //IsFalse   返回表达式的计算结果是否为 false。 //TODO
    
        //IsTrue    返回表达式的计算结果是否为 true。  //TODO
    

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

    相关文章

      网友评论

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

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