热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

表达式:使用API创建表达式树(2)

一、BlockExpression类:表式一个包含可在其中定义变量的表达式序列的块。是一组表达式,类似于多个委托的+后的效果,其返回表达式是最后一个表达式决定。以下是Block

一、BlockExpression类:表式一个包含可在其中定义变量的表达式序列的块。是一组表达式,类似于多个委托的 +=
后的效果,其返回表达式是最后一个表达式决定。
以下是BlockExpression的例子(取自官网中的例子,略改了下)



//声明一个包含有4个表达式的表达式块。
BlockExpression blockExpr = Expression.Block(Expression.Call(null,
typeof(Console).GetMethod("Write", new Type[] { typeof(String) }), Expression.Constant("你好!")),// 1
Expression.Call(null, typeof(Console).GetMethod("WriteLine", new Type[] { typeof(String) }),
Expression.Constant(
"BlockExpression表达式!")), // 2
Expression.Constant(42), //3
Expression.Call(null, typeof(string).GetMethod("Concat", new Type[] { typeof(string), typeof(string) }),
Expression.Constant(
"测试1 "), Expression.Constant("测试2")) //4
);
Console.WriteLine(
"***********************");
Console.WriteLine(
"显示表达示块的执行结果:");
// 首先创建表达式树,
// 编译,执行.
var result = Expression.Lambdastring>>(blockExpr).Compile()();
// 显示表达式块各表达式.
Console.WriteLine("表达式块中的各表达式:");
foreach (var expr in blockExpr.Expressions)
Console.WriteLine(expr.ToString());
// 表达式返回值
Console.WriteLine("表达式返回值");
Console.WriteLine(result);
//***********************
// 显示表达示块的执行结果:
//你好!BlockExpression表达式!
//表达式块中的各表达式:
//Write("你好!")
//WriteLine("BlockExpression表达式!")
//42
//Concat("测试1 ", "测试2")
//表达式返回值
//测试1 测试2

二、CatchBlock类:表示 try 块中的 catch
语句。
  单独的CatchBlock是没有意义的,他必需和TryExpression一起使用才有用。
  TryExpression类:表示
try/catch/finally/fault 块。
  构建如下表达式:(try {} Catch {})

  



TryExpression tryCatchExpr = Expression.TryCatch(
Expression.Block(
Expression.Divide(Expression.Constant(
50), Expression.Constant(2)),
Expression.Constant(
"无异常返回")
),
Expression.Catch(
typeof(DivideByZeroException),
Expression.Constant(
"异常返回")
)
);
Console.WriteLine(Expression.Lambda
string>>(tryCatchExpr).Compile()());
//输出为 :无异常返回

  将上面的  Expression.Constant(2),更改为  
Expression.Constant(0)

 



//输出为:异常返回

  如果无法判断异常类型,刚将typeof(DivideByZeroException),换成 
typeof(Exception);

  如要增加 Finally,则用 TryCatchFinally 构建:



TryExpression tryCatchExpr2 = Expression.TryCatchFinally(
Expression.Block(
Expression.Divide(Expression.Constant(
50), Expression.Constant(2)),
Expression.Constant(
"无导常返回")
),
Expression.Call(
typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }),
    Expression.Constant(
"Finally 块")),
Expression.Catch(
typeof(Exception),
Expression.Constant(
"导常返回")
)
);
Console.WriteLine(Expression.Lambda
string>>(tryCatchExpr2).Compile()());

表达式:使用API创建表达式树(2),布布扣,bubuko.com


推荐阅读
  • 实验六提交版
    1.21.3part2共用体与结构体类型的区别?答:共用体与结构体的区别在于它们的表示方法不同。结构体内,结构体的各成员顺序排列存储,每个成员都有自己独立的存储位置,而共用体的情况 ... [详细]
  • php黄色波浪线什么意思?
    导读:今天编程笔记来给各位分享关于php黄色波浪线什么意思的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: ... [详细]
  • 1:在Ubuntu中使用“apt-getinstall+app”命令可以在线安装绝大部分软件包,在高版本的Ubuntu中,apt-get可以简写为apt。2:sudo命令表示临时切 ... [详细]
  • RocketdecodeSimplifyDC
    https:mp.weixin.qq.coms4uWqBRrMVG6FlnBKmw8U-w介绍SimplifyDC如何简化解码逻辑。1.使用??简化从mint和maxt中查找的逻辑 ... [详细]
  • android巧妙利用反射机制获取控件id,避免大量冗杂的findviewbyid和butterknife注解一、反射机制概述Java反射机制是在运行状态中 ... [详细]
  • 获取鼠标的位置/坐标
    使用javascript如何获取鼠标的位置呢?获取光标的位置?获取鼠标坐标先看效果?核心方法:****返回鼠标的坐标*@parame*@returns{{x ... [详细]
  • 1、androidping和netstat可以通过Runtime.getRuntime().exec(cmd)执行。跟windows的命令相似,可以直接参考windows下的对应的 ... [详细]
  • 绑定完成的汗青绑定的基础是propertyChange事宜。怎样得知viewModel成员值的转变一直是开辟MVVM框架的主要题目。主流框架的处置惩罚有一下三大类:别的开辟一套AP ... [详细]
  • 状压dfs。。。。GemsFight!TimeLimit:2000010000MS(JavaOthers)    MemoryLimit:327680327680K ... [详细]
  • 如何绘制直观易懂的时标网络图
    时标网络图是用活动的定位和长度表示活动历时的项目网络图。是含网络逻辑的横道图,并且是任何以工作位置和长度代表其持续时间的项目网络图。项目经理圈子在时标网络图中,以实箭线表示工作,实 ... [详细]
  • 二哥,我今年大二,看你分享的《阿里巴巴Java开发手册》上有一段内容说:“循环体内,拼接字符串最好使用StringBuild ... [详细]
  • typescript编译报错不能用于索引类型
    备注:元素隐式地具有“any”类型,因为类型“string”的表达式不能用于索引类型“typeofimport(“xxx”)解决办法mock.tsexportfunctiontex ... [详细]
  • springboot 配置返回多个视图
    自己测试成功!不喜忽喷。直接上代码。第一步:packagecom.example.demo.base.web;importjava.io.File;importjava.util. ... [详细]
  • df du命令 查看磁盘大小
    1.df命令查看文件系统使用情况。最常用的命令就是df-h其他选项:a:列出所有的文件系统,包括系统特有的/proc等系统文件 k:以KB的容量显示 m:以MB的容量显示文件系统  ... [详细]
  • 一直以为,情商很重要,要注意提高自己的情商,注意学习为人处世,“世事洞明皆学问”。时间久了,反而觉得,也许情商并没有想象中的那么重要。有时候,决定一个人的层次,并不是靠情商,而是靠 ... [详细]
author-avatar
色系迷人_777
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有