11-1:Expression目录树
1. 理解:表达式目录树:语法树,或者说是一种可以被我们解析的数据结构,来源using System.Linq.Expressions;
2. 与Func比较,得到的结果一样
{
Func<int, int, int> func = (m, n) => m * n + 2;// new Func<int, int, int>((m, n) => m * n + 2);
Expression<Func<int, int, int>> exp = (m, n) => m * n + 2;//lambda表达式声明表达式目录树,只能一行 不能有大括号
int iResult1 = func.Invoke(12, 23);
int iResult2 = exp.Compile().Invoke(12, 23);//可以转换过去
}
3. 自己拼装表达式目录树过程
{
Expression<Func<int, int, int>> exp = (m, n) => m * n + 2;
//一下为上面这句表达式目录树的拼装过程。
ParameterExpression parameterExpression = Expression.Parameter(typeof(int), "m");
ParameterExpression parameterExpression2 = Expression.Parameter(typeof(int), "n");
var multiply = Expression.Multiply(parameterExpression, parameterExpression2);
var constant = Expression.Constant(2, typeof(int));
var add = Expression.Add(multiply, constant);
Expression<Func<int, int, int>> expression =
Expression.Lambda<Func<int, int, int>>(
add,
new ParameterExpression[]
{
parameterExpression,
parameterExpression2
});
int iResult1 = exp.Compile().Invoke(11, 12);
int iResult2 = expression.Compile().Invoke(11, 12);
}
4. 自己怎么拼装自己想要的过程:先写好目录树表达式,然后用ILSpy,看系统的拼装过程。