学习ExpressionTree(做装配脑袋出的练习题)
1 // 第一题:画出下列表达式的表达式树。一开始,您很可能不知道某些操作其实也是表达式(比如取数组的运算符a[2]),不过没有关系,后面的习题将帮你验证这一点。 //-a
ParameterExpression e1 = Expression.Variable(typeof(int), "a");
UnaryExpression u = Expression.Negate(e1);//求反的表达式
Console.WriteLine(u); //a + b * 2
ParameterExpression a = Expression.Variable(typeof(double), "a");
ParameterExpression b = Expression.Variable(typeof(double), "b");
ConstantExpression t = Expression.Constant(2d,typeof(double));
BinaryExpression cf = Expression.Multiply(b, t);
BinaryExpression jf = Expression.Add(a, cf);
Console.WriteLine(jf); // Math.Sin(x) + Math.Cos(y)
ParameterExpression px = Expression.Parameter(typeof(double), "x");
MethodCallExpression sin = Expression.Call(null, typeof(Math).GetMethod("Sin", BindingFlags.Static | BindingFlags.Public), px); ParameterExpression py = Expression.Parameter(typeof(double), "y");
MethodCallExpression cos = Expression.Call(null,
typeof(Math).GetMethod("Cos", BindingFlags.Public | BindingFlags.Static), py); BinaryExpression jf = Expression.Add(sin, cos); Console.WriteLine(jf.ToString()); // new StringBuilder(“Hello”)
ConstantExpression s = Expression.Constant("Hello", typeof(string));
NewExpression n = Expression.New(typeof(StringBuilder).GetConstructor(new Type[] { typeof(string) }), s);
Console.WriteLine(n.ToString()); // new int[] { a, b, a + b}
ParameterExpression a = Expression.Variable(typeof(int), "a");
ParameterExpression b = Expression.Variable(typeof(int), "b");
BinaryExpression c = Expression.Add(a, b);
NewArrayExpression n = Expression.NewArrayInit(typeof(int),a,b,c);
Console.WriteLine(n);
//a[i – 1] * i
ParameterExpression pi = Expression.Variable(typeof(int), "i");
ConstantExpression o = Expression.Constant(, typeof(int));
BinaryExpression j = Expression.Subtract(pi, o);
ParameterExpression arr = Expression.Variable(typeof(int[]),"a");
IndexExpression t = Expression.ArrayAccess(arr, j); BinaryExpression cf = Expression.Multiply(t, pi);
Console.WriteLine(cf); a.Length > b | b >=
ParameterExpression a = Expression.Variable(typeof(string), "a");
MemberExpression m = Expression.Property(a, typeof(string).GetProperty("Length"));
ParameterExpression b = Expression.Variable(typeof(int), "b");
BinaryExpression g = Expression.GreaterThan(m, b); ConstantExpression z = Expression.Constant(, typeof(int));
BinaryExpression b2 = Expression.GreaterThanOrEqual(b, z); BinaryExpression b3 = Expression.Or(g, b2);
Console.WriteLine(b3); //(高难度)new System.Windows.Point() { X = Math.Sin(a), Y = Math.Cos(a) }
NewExpression n = Expression.New(typeof(System.Windows.Point));//new System.Windows.Point()
ParameterExpression a = Expression.Variable(typeof(double), "a");
MethodCallExpression sin = Expression.Call(null, typeof(Math).GetMethod("Sin"), a);
UnaryExpression sinD = Expression.Convert(sin, typeof(double));
MethodCallExpression cos = Expression.Call(null, typeof(Math).GetMethod("Cos"), a);
UnaryExpression cosD = Expression.Convert(cos, typeof(double));
MemberAssignment as1 = Expression.Bind(typeof(System.Windows.Point).GetProperty("X"), sinD);
MemberAssignment as2 = Expression.Bind(typeof(System.Windows.Point).GetProperty("Y"), cosD); MemberInitExpression mm = Expression.MemberInit(n, as1, as2); LambdaExpression le = Expression.Lambda(mm, a); Console.WriteLine(le.Body); //提示:注意运算符的优先级。倒数第二题的a是String类型,其余变量你可以用任意合适的简单类型。如果想知道以上表达式分别是什么表达式,可以查MSDN。
学习ExpressionTree(做装配脑袋出的练习题)的更多相关文章
- Python小白学习之路(四)——第一次练习题
写在前面: 今天下雪了呢!连着两天都没有更新学习记录. 我没有偷懒呢.做了一天的练习题,昨天学的内容还没总结完,太累了就回去睡觉了 连续一周早起,强大的内心也无法支撑我疲惫的身体 今天早起做了整理.加 ...
- 为什么要用深度学习来做个性化推荐 CTR 预估
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:苏博览 深度学习应该这一两年计算机圈子里最热的一个词了.基于深度学习,工程师们在图像,语音,NLP等领域都取得了令人振奋的进展.而深 ...
- python学习5—一些关于基本数据结构的练习题
python学习5—一些关于基本数据结构的练习题 # 1. use _ to connect entries in a list # if there are no numbers in list l ...
- (私人收藏)python学习(游戏、爬虫、排序、练习题、错误总结)
python学习(游戏.爬虫.排序.练习题.错误总结) https://pan.baidu.com/s/1dPzSoZdULHElKvb57kuKSgl7bz python100经典练习题python ...
- 考试easy该,学习如何做?
我的两个学生(场和任)都讲了他们周末參加的一个认证考试不考大题考小题的事情.由感而发: 话说不用大题考,大概是不敢用大题考. 老师的教.和学生的学中.存在的一些问题得不到解决,整体讲,学生的学习效果没 ...
- spring学习总结——高级装配学习四(运行时:值注入、spring表达式)
前言: 当讨论依赖注入的时候,我们通常所讨论的是将一个bean引用注入到另一个bean的属性或构造器参数中.bean装配的另外一个方面指的是将一个值注入到bean的属性或者构造器参数中.在没有学习使用 ...
- C语言编程学习打造——做题游戏
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- 通过编写串口助手工具学习MFC过程--(十一)弹出模态型对话框
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...
- spring学习总结——高级装配学习二(处理自动装配的歧义性)
我们已经看到如何使用自动装配让Spring完全负责将bean引用注入到构造参数和属性中.自动装配能够提供很大的帮助.不过,spring容器中仅有一个bean匹配所需的结果时,自动装配才是有效的.如果不 ...
随机推荐
- linux_shell_根据网站来源分桶
应用场景: 3kw行url+\t+html记录 [网站混合] 需要:按照网站来源分桶输出 执行shell cat */*pack.html|awk -F '\t' '{ split($1,arr,&q ...
- SQL Server Log文件对磁盘的写操作大小是多少
原文:SQL Server Log文件对磁盘的写操作大小是多少 SQL Server 数据库有三种文件类型,分别是数据文件.次要数据文件和日志文件,其中日志文件包含着用于恢复数据库的所有日志信息,SQ ...
- 【转】Appium基于安卓的各种FindElement的控件定位方法实践
原文地址:http://blog.csdn.net/zhubaitian/article/details/39754041#t11 AppiumDriver的各种findElement方法的尝试,尝试 ...
- XP 多国语言包
http://download.microsoft.com/download/f/6/4/f648c363-6975-470c-8202-ac5aea706109/WindowsXP-KB835935 ...
- 将firebug安装在chrome浏览器上
一直很喜欢火狐浏览器,原因是火狐的插件很喜欢,几天突然发现firebug这个插件能够安装在chrome浏览器上,震惊,更震惊的是这个好似已经很长时间了,而我猜发现. 具体的具体页面地址是 http:/ ...
- [C#]设置或取消开机启动(注册表形式)
原文:[C#]设置或取消开机启动(注册表形式) 使用代码: 代码效果:
- Emojicon - 为你提供emoji表情的整套方案
Github : https://github.com/rockerhieu/emojicon 事实上国内的<表情大全>也有提供类似整套表情解决方式,并且还支持gif表情:http://w ...
- DateTime.ToString("dd/MM/yyyy");后,不能直接Convert.ToDateTime的解决:
原文:DateTime.ToString("dd/MM/yyyy");后,不能直接Convert.ToDateTime的解决: DateTime.ToString("dd ...
- linux下C语言中的flock函数使用方法 .
表头文件 #include<sys/file.h> 定义函数 int flock(int fd,int operation); 函数说明 flock()会依參数operation所指 ...
- SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别
原文:SQL点滴31-SQL语句中@@IDENTITY和@@ROWCOUNT区别 SQL语句中@@IDENTITY和@@ROWCOUNT区别 在一条 INSERT.SELECT INTO 或大容量复制 ...