c#LINQ表达树
如果你已经用过LINQ, 你应该知道函数方式,以及包含的丰富的类库, 如果你仍不了解, 那根据下面的链接去熟悉一下 the LINQ tutorial, lambda 。
表达树提供了丰富的包含参数的函数方式。
静态树解析
一个表达树是定义代码的数据结构
var sum = 1 + 2;
二元表达式, 更准确的来说,是一个二元相加表达式, 二元表达式包含二个结点, 二个结点都是固定表达式, 左边是1, 右边是2
这是一个树的完整体
定义定量状态 (var sum = 1 + 2;
)
- 显示声明变量 (
var sum
)- 显示声明var类型 (
var
) - 声明变量名称 (
sum
)
- 显示声明var类型 (
- 操作类型 (
=
) - 二元相加表达式 (
1 + 2
)- 左边操作数(
1
) - 相加运算符 (
+
) - 右边操作数 (
2
)
- 左边操作数(
var finalAnswer = this.SecretSauceFuncion( currentState.createInterimResult(), currentState.createSecondValue(1, 2), decisionServer.considerFinalOptions("hello")) + MoreSecretSauce('A', DateTime.Now, true);
对比表达树, 上述的方式就太不直观, 扩展性差
在.NET Core framework中存在大量的表达式类型, 你可以从这获取here
// Addition is an add expression for "1 + 2" var one = Expression.Constant(1, typeof(int)); var two = Expression.Constant(2, typeof(int)); var addition = Expression.Add(one, two);
以上简单的使用一些静态类创建表达树