(1)Expression我们称为是表达式树,是一种数据结构体,用于存储需要计算,运算的一种结构,这种结构可以只是存储,而不进行运算。通常表达式目录树是配合Lambda一起来使用的,lambda可以是匿名方法,当然也可以使用Expression来动态的创建!
1、Func是方法
Func<int, int, int> func = (m, n) => m * n + 2; Console.WriteLine(func.Invoke(1, 1)); //运算:1*1+2=3
?2、Expression是数据结构
//lambda表达式声明表达式目录树 Expression<Func<int, int, int>> exp = (m, n) => m * n + 2; int result = exp.Compile().Invoke(1, 2); Console.WriteLine(result); //运算:1*2+2=4
注意:Expression只能为1行(如下图会报错)
3、使用ILSpy反编译解析看一下
调一下格式更好看一点
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>> exp = Expression.Lambda<Func<int, int, int>>( add, new ParameterExpression[2] { parameterExpression, parameterExpression2 });
打印看看结果
int result = exp.Compile().Invoke(11, 12); Console.WriteLine(result);
得到134,与m*n+2得出结果一致
4、拼装练习
(1)练习一:
(2)练习二
(3)练习三