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. Android[安德鲁斯] 文本Air Video 远程播放电脑视频

    苹果iOS下列.目前应用Air Video,能力iOS由Wifi远程直接播放电脑视频,无需看视频复制到手机.非常好用!最近使用Android打电话.展望类别似应用,找了很长一段时间没有找到.在仔细的思 ...

  2. JavaWeb显示器

    本文研究的总结.欢迎转载,但请注明出处:http://blog.csdn.net/pistolove/article/details/44310967 A:监听器的定义      专门用于其它对象身上 ...

  3. C语言库函数大全及应用实例六

    原文:C语言库函数大全及应用实例六                                              [编程资料]C语言库函数大全及应用实例六 函数名: getlinesett ...

  4. Backup and Recovery Strategies1

    2.1.Data Recovery Strategy Determines Backup Strategy 在设计备份策略.如若数据恢复需求和数据恢复战略启动.每种类型的数据恢复需要你采取相应的备份类 ...

  5. Java替换字符或十进制数的字符串

    如今,这个项目的需求:将"甲状腺结节 5*3 cm" 更换 "甲状腺结节 * cm". 在一个字符串的数字来替换空白. 码,如以下: public static ...

  6. linux有用技巧:使用快照制作虚拟机

    在日常的学习其中,假设遇到了集群和负载均衡类的实验,须要用到大量的虚拟机,假设一个一个的去创建,显然是很费力和低效的.所以今天交给大家怎样用快照来制作虚拟机.想要多少给你多少^_^.仅仅要内存够用! ...

  7. Redis3

    Redis到底该如何利用 上两篇受益匪浅,秉着趁热打铁,不挖到最深不罢休的精神,我决定追加这篇.上一篇里最后我有提到实现分级缓存管理应该是个可行的方案,因此今天特别实践了一下.不过缓存分级之后也发现了 ...

  8. CentOS上部署Apache、MySQL和PHP

    centos上yum安装很方便,下面介绍编译安装的方式. 第一步要在CentOS上安装gcc.g++等开发工具 可以从系统光盘上安装,或者 #yum groupinstall "Develo ...

  9. [译]Java 设计模式之工厂

    (文章翻译自Java Design Pattern: Factory) 1.Java工厂模式的来历 工厂设计模式用于创建基于不同参数的对象.下面的例子就是在一个工厂里创建一个人.如果我们向工厂要一个b ...

  10. leetcode第36题--Sudoku Solver

    题目: Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated b ...