初识表达式目录树

本文深入探讨了表达式树的概念,展示了如何使用表达式树来表示和操作Lambda表达式,包括其与委托的区别及如何将表达式树编译为可执行的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是表达式目录树

  • Expression:提供一种基类,表示表达式树节点的类派生自该基类。

    //首先  来看一下一个funk  传入两个int类型的值 返回计算结果
    Func<int, int, int> func = (y, x) => x * x + y;
    //通过以上代码能看出来 定义的这个委托所做的事情就是吧传入的两个值进行简单的相加 返回两值之和
    //如果还是理解不了   由在下来给这个fun拆分一哈
    //总所周知委托的意思就把方法以参数传入  (y, x) => y + x; 这一句就是一个lambda表达式
    //由一个方法简化而来
    //所以也等值于以下
    Func<int, int, int> func1 = new Func<int, int, int>(
    delegate (int x, int y)
    {
        return x * x + y;
    });
    //所以呢  为了方便 在编译器中 可以把new Func<int, int, int>  以及关键字Ddelegate去掉 
    //加上gosto:=>符号  继续缩写  就成了以上方法
    Func<int, int, int> func2 =
    (x, y) =>
    {
        return x * x + y;
    };
    //接下来来看看表达式目录树
    Expression<Func<int, int, int>> expression = (x, y) => x * x + y;
    //这个地方是把Func做为一个类型 传入Expression中,里面的方法体是和上面的Func相同
    //是同Func或者说Action不同的是   Funk中的方法体是直接 计算
    //而在表达式目录树中会转换为 Add(multiplication(x*x)+y)
    

    即为
    表达式目录树简略模型

  • 当然 Expression也可以作为lambda表达式操作

    //而在表达式目录树中会转换为 Add(multiplication(x,x)+y)
    //在表达式目录树后加上Compile 即可把目录树转换为Lambda表达式,Compile官方给出的定义即为:
    //编译表达式树由描述为可执行代码的 lambda 表达式,并生成一个委托,表示 lambda 表达式。
    int sumNum = expression.Compile().Invoke(12, 12);
    //这两个运行后得到的结果是相同的
    int sumNum1 = func.Invoke(12, 12);
    

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值