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(做装配脑袋出的练习题)的更多相关文章

  1. Python小白学习之路(四)——第一次练习题

    写在前面: 今天下雪了呢!连着两天都没有更新学习记录. 我没有偷懒呢.做了一天的练习题,昨天学的内容还没总结完,太累了就回去睡觉了 连续一周早起,强大的内心也无法支撑我疲惫的身体 今天早起做了整理.加 ...

  2. 为什么要用深度学习来做个性化推荐 CTR 预估

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:苏博览 深度学习应该这一两年计算机圈子里最热的一个词了.基于深度学习,工程师们在图像,语音,NLP等领域都取得了令人振奋的进展.而深 ...

  3. python学习5—一些关于基本数据结构的练习题

    python学习5—一些关于基本数据结构的练习题 # 1. use _ to connect entries in a list # if there are no numbers in list l ...

  4. (私人收藏)python学习(游戏、爬虫、排序、练习题、错误总结)

    python学习(游戏.爬虫.排序.练习题.错误总结) https://pan.baidu.com/s/1dPzSoZdULHElKvb57kuKSgl7bz python100经典练习题python ...

  5. 考试easy该,学习如何做?

    我的两个学生(场和任)都讲了他们周末參加的一个认证考试不考大题考小题的事情.由感而发: 话说不用大题考,大概是不敢用大题考. 老师的教.和学生的学中.存在的一些问题得不到解决,整体讲,学生的学习效果没 ...

  6. spring学习总结——高级装配学习四(运行时:值注入、spring表达式)

    前言: 当讨论依赖注入的时候,我们通常所讨论的是将一个bean引用注入到另一个bean的属性或构造器参数中.bean装配的另外一个方面指的是将一个值注入到bean的属性或者构造器参数中.在没有学习使用 ...

  7. C语言编程学习打造——做题游戏

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  8. 通过编写串口助手工具学习MFC过程--(十一)弹出模态型对话框

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...

  9. spring学习总结——高级装配学习二(处理自动装配的歧义性)

    我们已经看到如何使用自动装配让Spring完全负责将bean引用注入到构造参数和属性中.自动装配能够提供很大的帮助.不过,spring容器中仅有一个bean匹配所需的结果时,自动装配才是有效的.如果不 ...

随机推荐

  1. ASP.NET MVC学习之控制器篇扩展性

    原文:ASP.NET MVC学习之控制器篇扩展性 一.前言 在之前的一篇随笔中已经讲述过控制器,而今天的随笔是作为之前的扩展. 二.正文 1.自定义动作方法 相信大家在开发过程一定会遇到动作方法的重名 ...

  2. POJ 2586 Y2K Accounting Bug(枚举洪水问题)

    Y2K Accounting Bug Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10674   Accepted: 53 ...

  3. EF4.1: Add/Attach and Entity States(EF中的实体状态转换说明)

    实体的状态,连接以及 SaveChanges 方法 数据库上下文对象维护内存中的对象与数据库中数据行之间的同步.这些信息在调用 SaveChanges方法被调用的时候使用.例如,当使用 Add 方法传 ...

  4. java web.xml listener servlet 和filter加载顺序

    在该项目中总会遇到一些关于加载的优先问题.最近遇到了同样的类别似的,所以,如果你发现信息汇总下,以下是转载其他一些人,毕竟,人们写的不错.它不重复创建的轮.只是略作修改自己的观点. 首先能够肯定的是, ...

  5. google code 上源码的下载方法

    SVN全称是Subversion,是Apache的一个子项目 ,具体能够到SVN中文站(http://www.subversion.org.cn/)去了解下.Google Code是Google的一个 ...

  6. 将firebug安装在chrome浏览器上

    一直很喜欢火狐浏览器,原因是火狐的插件很喜欢,几天突然发现firebug这个插件能够安装在chrome浏览器上,震惊,更震惊的是这个好似已经很长时间了,而我猜发现. 具体的具体页面地址是 http:/ ...

  7. AFNetworking3.0 POST请求

    // 请求管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer ...

  8. IOS数组排序等

    一.UITextField的代理方法 #pragma mark 当文本框开始编辑的时候调用---开始聚焦 - (void)textFieldDidBeginEditing:(UITextField * ...

  9. NYOJ 14 场地安排(它可以被视为一个经典问题)

    会场安排问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 学校的小礼堂每天都会有很多活动.有时间这些活动的计划时间会发生冲突,须要选择出一些活动进行举办.小刘的工 ...

  10. js实现是倒计时功能

    工作中经常用到倒计时的功能,最近在整理之前做的项目的时候,发现自己写过一个倒计时的功能的效果,这里和大家分享下!实现这个功能是用原生js写的,不需要加载额外的库文件!功能比较简单,但是可以在此基础上扩 ...