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

C# 表达式树 (5)

作者: wwmin_ | 来源:发表于2021-01-27 17:20 被阅读0次

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

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

  • Condition 创建一个表示条件语句的 ConditionalExpression。
//Condition    创建一个表示条件语句的 ConditionalExpression。
    void ConditionSample()
    {
        int conditionNum = 100;
        Expression conditionExpr = Expression.Condition(
            Expression.Constant(conditionNum > 10),
            Expression.Constant("num is greater than 10"),
            Expression.Constant("num is smaller than 10")
            );
        conditionExpr.ToString().Dump();//IIF(True, "num is greater than 10", "num is smaller than 10")
        Expression.Lambda<Func<string>>(conditionExpr).Compile()().Dump();//num is greater than 10
    }
    ConditionSample();
  • Constant 创建一个 ConstantExpression。
    //Constant    创建一个 ConstantExpression。
    //创建一个可以为null的常量表达式
    void ConstantSample()
    {
        Expression constantNullalbeExpr = Expression.Constant(null, typeof(int?));
        var coaleasceExpr = Expression.Coalesce(constantNullalbeExpr, Expression.Constant(123456));
        var varCoalesceNullableExpr = Expression.Variable(typeof(int), "sampleVar");
        var assignNullableExpr = Expression.Assign(varCoalesceNullableExpr, coaleasceExpr);
        var blockAssignNullableExpr = Expression.Block(new ParameterExpression[] { varCoalesceNullableExpr }, assignNullableExpr);
        blockAssignNullableExpr.Expressions.ForEach(p => p.ToString().Dump());//(sampleVar = (null ?? 123456))
        Expression.Lambda<Func<int>>(blockAssignNullableExpr).Compile()().Dump();//123456
    }
    ConstantSample();
  • Continue 创建一个表示 continue 语句的 GotoExpression。
    //Continue    创建一个表示 continue 语句的 GotoExpression。
    void ContinueSample()
    {
        LabelTarget breakLabel = Expression.Label();
        LabelTarget continueLabel = Expression.Label();
        Expression continueExpr = Expression.Continue(continueLabel);
        ParameterExpression count = Expression.Parameter(typeof(int));
        Expression loopExpr = Expression.Loop(
            Expression.Block(
                Expression.IfThen(
                    Expression.GreaterThan(count, Expression.Constant(3)),
                    Expression.Break(breakLabel)
                ),
                Expression.PreIncrementAssign(count),
                Expression.Call(
                    null,
                    typeof(Console).GetMethod("WriteLine", new Type[] { typeof(String) })!,
                    Expression.Constant("Loop")
                    ),
                continueExpr,
                Expression.PreDecrementAssign(count)
            ),
            breakLabel,
            continueLabel
        );
        Expression.Lambda<Action<int>>(loopExpr, count).Compile()(1);
    }
    ContinueSample();//Loop Loop Loop
  • Convert 创建一个表示类型转换运算的 UnaryExpression。
    //Convert     创建一个表示类型转换运算的 UnaryExpression。
    void ConvertSample()
    {
        Expression convertExpr = Expression.Convert(
                                        Expression.Constant(5.5),
                                        typeof(Int16)
                                    );
        convertExpr.ToString().Dump();//Convert(5.5, Int16)
        Expression.Lambda<Func<Int16>>(convertExpr).Compile()().Dump();//5
    }
    ConvertSample();

    //ConvertChecked  (类似与 Convert)  创建一个 UnaryExpression,它表示在目标类型发生溢出时引发异常的转换运算。

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

相关文章

  • C# 表达式树 (5)

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

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

  • C# 表达式树 (9)

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

  • C# 表达式树 (14)

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

  • C# 表达式树 (12)

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

网友评论

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

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