解析C#中is和as操作符的用法
c# 中 is和as 操作符是用来进行强制类型转换的
is : 检查一个对象是否兼容于其他指定的类型,并返回一个Bool值,永远不会抛出异常
if (o is Label)
{
Label lb = (Label)o;
Response.Write("类型转换成功");
}
else
{
Response.Write("类型转换失败");
}
在上面的代码,CLR实际上会检查两次对象的类型,is操作符先核实一次,如果o兼容于Lable,那么在(Label)o时会再次核实一次,效率比较低,不建议使用
as:与强制类型转换是一样的,但是永远不会抛出异常,即如果转换不成功,会返回null
Label lb = o as Label;
if (lb == null)
{
Response.Write("类型转换失败");
}
else
{
Response.Write("类型转换成功");
}
在上面的代码中,CLR只会进行一次类型核实,效率要高于 is
在学习C#时,看到这样一种表达方式:
if(user == null)
return mapping.FindForward("error");
有些不明白,上网查了些资料,对is和as操作符有了些了解,把资料放在这里供学习和参考:
在C#中,所有的东西都是对象。因此任何常数也是一个整型对象。这里用到了as ,as 是C#语言里面的一个关键字。as 运算符类似于类型转换,所不同的是,当转换失败时,as 运算符将产生空,而不是引发异常。在形式上,这种形式的表达式:
as 运算符只执行引用转换和装箱转换。
as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用case表达式来代替其执行
关于is的其实也差不多,只是IS不会帮你进行任何的转换。所以需要自已进行显示转换
is操作符进行转换,它自动检查时局是否和类型兼容,并返回结果。而且它不会抛出异常。如果对象引用为null,则is总返回false。
{
Class2 cls2 = (Class2)cls1;
}
else
{
System.Console.WriteLine("Error 2!");
}
as操作符进行转换:
if (cls2!=null)
System.Console.WriteLine("Ok");
else
System.Console.WriteLine("Error!");
对比is和as操作符转换的两种方式,is需要做两次对象的类型检查,而as需要做一次对象类型检查,再加一次null的检查,而null检查开销比对象类型检查少。相对as的方法效率高些。
转载于:https://www.cnblogs.com/jhxk/articles/1738997.html
解析C#中is和as操作符的用法相关推荐
- 解析C#中is和as操作符的用法 two
c# 中 is和as 操作符是用来进行强制类型转换的 is : 检查一个对象是否兼容于其他指定的类型,并返回一个Bool值,永远不会抛出异常 object o = new object(); ...
- linux之getcwd函数解析,Linux 中C语言getcwd()函数的用法
Linux 中C语言getcwd()函数的用法 先来看该函数的声明: #include char *getcwd(char *buf,size_t size); 介绍: 参数说明:getcwd()会将 ...
- python集合类型的四种操作符_深入解析Python中的集合类型操作符
(1)标准类型操作符(所有的集合类型) 成员关系 (in, not in) 就序列而言,Python中的in和not in操作符决定某个元素是否是一个集合中的成员. 集合等价/不等价 等价/不等价被用 ...
- C++中的指针特征操作符重载
文章目录 1 C++中的指针特征操作符重载 1.1 指针特征操作符重载 1.2 使用指针特征操作符重载实现智能指针 1 C++中的指针特征操作符重载 1.1 指针特征操作符重载 指针特征操作符重载: ...
- java中的双冒号操作符
java :: Java中的双冒号操作符 </h1><div class="clear"></div><div class="p ...
- 【C/C++ POD 类型】深度解析C++中的POD类型:从理论基础到项目实践
深度解析C++中的POD类型:从理论基础到项目实践 1. C++中的POD类型(Plain Old Data) 1.1 POD类型的定义和特性 Trivial类型 Standard layout类型 ...
- 从多维度解析神经科学中的视觉编码
来源:脑人言 一棵树是如何被知觉为"一棵树"?我又是如何认出你是"你"?我们可能会说这很大程度依赖于我们的视觉感知.以后者为例,从你身上反射的光将你的信息传入我 ...
- 2dx解析cocosbuilder中使用layer时的缺陷
2dx解析cocosbuilder中使用layer时的缺陷 cocos2d-x 3.7 cocosbuilder中的layer通常会用到触摸属性: 但是在2dx解析布局文件的时候,却很多属性都没解析: ...
- 解析 WEB 中所有 URL 的简单牛B代码,先保存起来,方式将来找不到了
解析 WEB 中所有 URL 的简单牛B代码,先保存起来,方式将来找不到了 2011-11-22 16:48 by 通用信息化建设平台, 1471 ...
最新文章
- CSS Modules
- Operation category READ is not supported in state standby
- 对比学习系列论文SimROD(二): A Simple Adaptation Method for Robust Object Detection
- 重学java基础第十八课:卸载jdk和安装jdk
- 漫步数学分析九——级数
- 库存管理软件挑选窍门:怎么才算合格的库存管理软件?
- mybatis代码生成器
- 使用Sigar采系统信息
- vba编写的出库单(可添加出库项目记录、生成、打印出库单)
- 通过注册表修改键盘映射
- 关于连接数据库出现时差问题的解决方法
- npm run build 报错: No such file or directory
- springboot 自定义starter
- 嵌入式linux kermit,嵌入式开发常用串口工具kermit使用笔记
- Generative Time Series Forecasting with Diffusion, Denoise, and Disentanglement
- 开发基于 Google Map 的 Android 应用
- 在计算机系统中存储容量最大的设备,计算机系统中存储容量最大的部件是().
- angularJS学习小结——filter
- 【Linux】冯诺依曼体系结构
- 51单片机中断与计时器
热门文章
- linux awk
- 太原锦华计算机学校教学质量怎样,一所好学校有哪些特点?
- xstatic图形连接linux,RHCE认证考试模拟题深入讲解:linux配置静态IP地址为:192.168.0.X!...
- 信息安全完全参考手册之信息安全概述(第一章)
- [小心][注意][请转发]请检查你环境中的SSD磁盘!
- 华为-公有云-云硬盘-磁盘类型及性能介绍
- Mysql学习总结(67)——MYSQL慢查询日志
- Docker学习总结(20)——Docker 容器实践精华问答集锦
- Java基础学习总结(41)——JPA常用注解
- html 滚动条处于页面底部,滚动条一直置于页面底部,开发聊天程序须知。