【已更新最新开发文章,点击查看详细】

但是,表达式树基于一组与 Roslyn API 完全不同的类和 API。

以下是一个代码行:

var sum = 1 + 2;

该表达式被进一步细分为表示加法运算、该加法左操作数和右操作数的表达式。

此处的两个节点都是常量表达式:左操作数是值 1,右操作数是值 2

直观地看,整个语句是一个树:应从根节点开始,遍历到树中的每个节点,以查看构成语句的代码:

  • 具有赋值 (var sum = 1 + 2;) 的变量声明语句
    • 赋值运算符 (=)
      • 隐式 var 关键字 (var)
      • 变量名称声明 (sum)
    • 二进制加法表达式 (1 + 2)
      • 左操作数 (1)
      • 加法运算符 (+)
      • 右操作数 (2)

请思考此表达式:

var finalAnswer = this.SecretSauceFunction(currentState.createInterimResult(),
currentState.createSecondValue(
1, 2), decisionServer.considerFinalOptions("hello")
)
+ MoreSecretSauce('A', DateTime.Now, true);

该二进制加法运算符可能是对重写的加法运算符的方法调用(具体取决于 SecretSauceFunction() 或 MoreSecretSauce() 的返回类型),解析为对为类定义的二进制加法运算符的静态方法调用。

父节点将具有对其子节点的引用,且每个节点均具有一个用于介绍节点类型的属性。

优美的数据结构说明了 C# 编译器如何分析最复杂的 C# 程序并从该复杂的源代码创建正确的输出。

表达式树的功能非常强大。

还可以将表达式树转换为可执行的委托,并执行代码。

在本系列中看到的那样,表达式树的 API 支持单个循环表达式,该表达式包含控制重复循环的 break 和 continue 表达式。

如果想要改变(更改)表达式树,则必须创建基于原始树副本但包含所需更改的新树。

【已更新最新开发文章,点击查看详细】

相关文章:

  • 2022-03-03
  • 2022-01-21
  • 2021-06-13
  • 2022-12-23
  • 2021-11-28
  • 2021-05-11
  • 2021-12-07
  • 2021-10-30
猜你喜欢
  • 2022-02-05
  • 2021-10-14
  • 2021-11-21
  • 2021-09-04
  • 2021-08-12
  • 2021-09-04
  • 2021-07-15
相关资源
相似解决方案