学习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匹配所需的结果时,自动装配才是有效的.如果不 ...
随机推荐
- ASP.NET MVC学习之控制器篇扩展性
原文:ASP.NET MVC学习之控制器篇扩展性 一.前言 在之前的一篇随笔中已经讲述过控制器,而今天的随笔是作为之前的扩展. 二.正文 1.自定义动作方法 相信大家在开发过程一定会遇到动作方法的重名 ...
- POJ 2586 Y2K Accounting Bug(枚举洪水问题)
Y2K Accounting Bug Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10674 Accepted: 53 ...
- EF4.1: Add/Attach and Entity States(EF中的实体状态转换说明)
实体的状态,连接以及 SaveChanges 方法 数据库上下文对象维护内存中的对象与数据库中数据行之间的同步.这些信息在调用 SaveChanges方法被调用的时候使用.例如,当使用 Add 方法传 ...
- java web.xml listener servlet 和filter加载顺序
在该项目中总会遇到一些关于加载的优先问题.最近遇到了同样的类别似的,所以,如果你发现信息汇总下,以下是转载其他一些人,毕竟,人们写的不错.它不重复创建的轮.只是略作修改自己的观点. 首先能够肯定的是, ...
- google code 上源码的下载方法
SVN全称是Subversion,是Apache的一个子项目 ,具体能够到SVN中文站(http://www.subversion.org.cn/)去了解下.Google Code是Google的一个 ...
- 将firebug安装在chrome浏览器上
一直很喜欢火狐浏览器,原因是火狐的插件很喜欢,几天突然发现firebug这个插件能够安装在chrome浏览器上,震惊,更震惊的是这个好似已经很长时间了,而我猜发现. 具体的具体页面地址是 http:/ ...
- AFNetworking3.0 POST请求
// 请求管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer ...
- IOS数组排序等
一.UITextField的代理方法 #pragma mark 当文本框开始编辑的时候调用---开始聚焦 - (void)textFieldDidBeginEditing:(UITextField * ...
- NYOJ 14 场地安排(它可以被视为一个经典问题)
会场安排问题 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描写叙述 学校的小礼堂每天都会有很多活动.有时间这些活动的计划时间会发生冲突,须要选择出一些活动进行举办.小刘的工 ...
- js实现是倒计时功能
工作中经常用到倒计时的功能,最近在整理之前做的项目的时候,发现自己写过一个倒计时的功能的效果,这里和大家分享下!实现这个功能是用原生js写的,不需要加载额外的库文件!功能比较简单,但是可以在此基础上扩 ...