C# .Net学习笔记—— Expression 表达式目录树
2023-12-20 13:43:15
一、什么是表达式目录树
(1)Expression我们称为是表达式树,是一种数据结构体,用于存储需要计算,运算的一种结构,这种结构可以只是存储,而不进行运算。通常表达式目录树是配合Lambda一起来使用的,lambda可以是匿名方法,当然也可以使用Expression来动态的创建!
二、Func与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)练习三
文章来源:https://blog.csdn.net/weixin_46711336/article/details/135101375
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!