Microsoft.CSharp.dll程序集的作用
《C#与.NET 4高级程序设计:第5版》第18章动态类型和动态语言运行时,本章,我们将学习dynamic关键字的方方面面,理解如何使用DLR (Dynamic Language Runtime,动态语言运行时)将松散的类型映射到正确的内存对象。理解了DLR提供的诸多服务之后,你将看到一些示例,它们使用动态类型来简化后期绑定方法的调用(通过反射服务)并且可以方便地与遗留的COM库进行通信。本节为大家介绍Microsoft.CSharp.dll程序集的作用。
作者:朱晔 等译来源:人民邮电出版社|2011-04-03 12:59
收藏
分享
18.1.2 Microsoft.CSharp.dll程序集的作用
当使用Visual Studio 2010新建一个C#项目时,将自动引用一个名为Microsoft.CSharp.dll的.NET 4程序集(可以在Solution Explorer的References文件夹下找到)。这个库非常小,只定义了一个命名空间(Microsoft.CSharp.RuntimeBinder)和两个类(如图18-2所示)。
(点击查看大图)图18-2 Microsoft.CSharp.dll程序集 |
顾名思义,这两个类为强类型的异常类。RuntimeBinderException是最普通的类,如果试图调用一个不存在的动态数据类型的成员,将会抛出该异常(比如调用toupper()和Foo()方法)。如果调用了一个存在的成员但却指定了错误的参数数据,将同样会抛出该异常。
由于动态数据的这种不确定性,在调用用C#的dynamic关键字声明的变量的成员时,可以用合适的try/catch块来包裹,并以一种优雅的方式来处理异常。
- static void InvokeMembersOnDynamicData()
- {
- dynamic textData1 = "Hello";
- try
- {
- Console.WriteLine(textData1.ToUpper());
- Console.WriteLine(textData1.toupper());
- Console.WriteLine(textData1.Foo(10, "ee", DateTime.Now));
- }
- catch (Microsoft.CSharp.RuntimeBinder.RuntimeBinderException ex)
- {
- Console.WriteLine(ex.Message);
- }
- }
在调用这个方法时,会发现对ToUpper()方法(注意T和U这两个字母)的调用正确无误,但控制台上还是会显示一条错误数据。
- HELLO
- 'string' does not contain a definition for 'toupper'
当然,如果将所有动态方法的调用都用try/catch块来包裹,这个过程将是十分麻烦的。只要注意了拼写和参数传递,就没有必要都进行包裹。但是,当你不确定目标类型是否包含某个成员的时候,如果用try/catch块来进行包裹的话,那么异常的捕获就会十分方便了。
Microsoft.CSharp.dll程序集的作用相关推荐
- 找不到编译动态表达式所需的一种或多种类型。是否缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用?...
提示"找不到编译动态表达式所需的一种或多种类型.是否缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用? "错误 解决方法: 将引入的 ...
- 修复SQL Server 2016年Microsoft.AnalysisServices.AdomdClientUI.dll程序集错误的前4个选项
I've always been in favor of an orthodox strategy when it comes to applying SQL Server updates which ...
- 关于异常Microsoft.CSharp.RuntimeBinder.RuntimeBinderException
关于Microsoft.CSharp.RuntimeBinder.RuntimeBinderException的异常一般来自于两种, 第一种: Predefined type 'Microsoft.C ...
- Microsoft.CSharp.CSharpCodeProvider
Microsoft.CSharp.CSharpCodeProvider MSDN 提供对 C# 代码生成器和代码编译器的实例的访问.类提供可用来检索 C# ICodeGenerator 和 ICode ...
- CS0656 缺少编译器要求的成员“Microsoft.CSharp..........
严重性 代码 说明 项目 文件 行 禁止显示状态 错误 CS0656 缺少编译器要求的成员"Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo ...
- 解决SQL Server 导入System.Web.dll程序集,报错问题
本人由于需要做一个小项目,项目的内容是这样的:SQl Server中有个报警信息表(tb_Alarm_info),当这个报警信息表有新的数据插入时,将这个产生的报警信息发送到相关人员手机上: 解决思路 ...
- 预定义的类型“Microsoft.CSharp.RuntimeBinder.Binder”未定义或未导入
用记事本打开专案资料夹里的 *.csproj 找到<ItemGroup>区段 手动加入 <Reference Include="Microsoft.CSharp" ...
- vmware tools安装程序无法继续,Microsoft Runtime DLL安装程序未能完成安装。的解决方法
vmware tools安装程序无法继续,Microsoft Runtime DLL安装程序未能完成安装.的解决方法 参考文章: (1)vmware tools安装程序无法继续,Microsoft R ...
- 安装VMware,出现Microsoft Runtime DLL 安装程序未能完成安装,解决方法
安装VMware,出现Microsoft Runtime DLL 安装程序未能完成安装,解决方法 参考文章: (1)安装VMware,出现Microsoft Runtime DLL 安装程序未能完成安 ...
最新文章
- UVA116 单向TSP Unidirectional TSP(多阶段决策问题、输出字典序最小的方案、DAG上DP)
- 悬挑脚手架卸载钢丝绳要求_100m的悬挑脚手架技术交底
- 从零开始の后缀自动机
- main函数的参数详解,它们是何时何处传入的?(main函数的参数值是从操作系统命令行上获得的)
- Oracle imp字符集转换,imp/exp 字符集转换
- 企业云桌面-03-安装第1个企业 CA-013-CA01
- 中动态路径加载_GOT段在linux系统中实现代码动态加载的作用和其他段的说明
- MySQL千万级别大表如何优化?
- crontab 指令笔记
- 2018年7月3日笔记
- 88se9230 linux raid,M.2转4口SATA 6G RAID阵列卡 (PCIe2.0),IO-M2F9230-4IR
- 全国哀悼日,网站变成黑白色
- python爬虫 点击下一页,总结python爬虫抓站的实用技巧 python爬虫怎么获取下一页的url...
- Dissect Certificate
- POJ 1625 Censored!(自动机DP+高精度)
- springboot考研规划系统 毕业设计-附源码541230
- (转载)JavaScript:双波浪号“~~“ 与 Math.floor()
- 抖音seo搜索是什么?源码部署-seo排名系统源码分析
- LeetCode——桶的思想
- qt 判断ctrl键被按下_赵锁仙原创:当我按下注销键之后
热门文章
- 实验吧—Web——WP之 Guess Next Session
- C#中yield return用法
- 同步,异步,多线程,你怎么看?
- HDOJ 1875 畅通工程再续
- Powershell 最大值堆栈实现
- redis存储数据类型_Redis与Memcahe的区别最全整理
- python爬取百度贴吧中的所有邮箱_python写的百度贴吧邮箱采集(带界面)
- linux内核 频率,Linux内核中CPU主频和电压调整 (三)
- mysql.data.dll win10_【MySQL】Windows10下安装
- 详解公钥、私钥、数字证书的概念