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

C# 表达式树 (12)

作者: wwmin_ | 来源:发表于2021-02-03 21:34 被阅读0次

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

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

    • Multiply 创建一个表示不进行溢出检查的算术乘法运算的 BinaryExpression。
        //Multiply   创建一个表示不进行溢出检查的算术乘法运算的 BinaryExpression。
        void MultiplySample()
        {
            Expression expr = Expression.Multiply(Expression.Constant(1), Expression.Constant(2));
            Expression.Lambda<Func<int>>(expr).Compile()().Dump("Multiply");//2
        }
        MultiplySample();
    
        //MultiplyAssign  创建一个表示不进行溢出检查的乘法赋值运算的 BinaryExpression。 同AddAssign
    
    • Negate 创建一个表示算术求反运算的 UnaryExpression。
        //Negate     创建一个表示算术求反运算的 UnaryExpression。
        void NegateSample()
        {
            Expression negateExpr = Expression.Negate(Expression.Constant(5));
            Expression.Lambda<Func<int>>(negateExpr).Compile()().Dump("Negate");//-5
        }
        NegateSample();
    
    • New 创建一个 NewExpression。
        //New   创建一个 NewExpression。
        void NewSample()
        {
            NewExpression newDictionaryExpression = Expression.New(typeof(Dictionary<int, string>));
            newDictionaryExpression.ToString().Dump("New");//new Dictionary`2()
    
            NewExpression newListExpression = Expression.New(typeof(List<int>));
            newListExpression.ToString().Dump("New");//new List`1()
        }
        NewSample();
    
    • NewArrayBounds 创建一个表示创建具有指定秩的数组的 NewArrayExpression。
        //NewArrayBounds   创建一个表示创建具有指定秩的数组的 NewArrayExpression。
        void NewArrayBoundsSample()
        {
            NewArrayExpression newArrayExpression = Expression.NewArrayBounds(
                    typeof(string),
                    Expression.Constant(3),
                    Expression.Constant(2)
                );
            newArrayExpression.ToString().Dump("NewArrayBounds");//new System.String[,](3, 2)
        }
        NewArrayBoundsSample();
    
    • NewArrayInit 创建一个表示创建一维数组并使用元素列表初始化该数组的 NewArrayExpression。
        //NewArrayInit    创建一个表示创建一维数组并使用元素列表初始化该数组的 NewArrayExpression。
        void NewArrayInitSample()
        {
            List<Expression> trees = new List<Expression>()     {
                Expression.Constant("oak"),
                Expression.Constant("fir"),
                Expression.Constant("spruce"),
                Expression.Constant("alder")
              };
    
            NewArrayExpression newArrayExpression = Expression.NewArrayInit(typeof(string), trees);
            newArrayExpression.ToString().Dump("NewArrayInit");
        }
        NewArrayInitSample();
    
    • Not 创建一个表示按位求补运算的 UnaryExpression。
        //Not   创建一个表示按位求补运算的 UnaryExpression。
        void NotSample()
        {
            Expression notExpr = Expression.Not(Expression.Constant(true));
            notExpr.ToString().Dump("NotExpr");//Not(true)
            Expression.Lambda<Func<bool>>(notExpr).Compile()().Dump("Not");//false
        }
        NotSample();
    
    • NotEqual 创建一个表示不相等比较的 BinaryExpression。
        //NotEqual   创建一个表示不相等比较的 BinaryExpression。
        void NotEqualSample()
        {
            Expression notEqualExpr = Expression.NotEqual(Expression.Constant(1), Expression.Constant(2));
            notEqualExpr.ToString().Dump("NotEqualExpr");//(1!=2)
            Expression.Lambda<Func<bool>>(notEqualExpr).Compile()().Dump("NotEqual");//true
        }
        NotEqualSample();
    
        //OnesComplement    返回表示一的补数的表达式。//TODO
    

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

    相关文章

      网友评论

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

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