is和as是.NET中常用的操作,两者都可以实现类型的安全转换,但两者却有所不同。

public class Employee
{}public void Add(object obj)//写法一
{Employee e=null;if(obj is Employee){e=(Employee)obj;//正常处理}else{//其他处理}
}public void Add(object obj)//写法二
{Employee e=obj as Employee;if(obj==null){//其他处理}else{//正常处理}
}

上面的代码中都是将obj转换成Employee,两者在写法上都是OK的,也可以编译和运行。但是两者在性能上却有些许差别。
is操作需要判断obj的类型是不是Employee,如果是则进行强制转换e=(Employee)obj。在强制转换时,CLR又会对obj进行一次类型的判断,如果不是Employee类型,
则会抛出异常System.InvalidCastException。
as操作符,在CLR阶段会进行一次类型判断,如果是Employee,则转换为Employee类型,如果不是,则转换成null。所以这才有了写法二中的if(obj==null)的判断。
相信到这里,已经明白了这两种写法在性能上的差异。is的写法需要两次类型判断,as只需要一次类型判断。
当然,有的程序员直接是采用下面的这种写法:

public void Add(object obj)//写法三
{try{Employee e=(Employee)obj;//正常处理}catch{//其他处理throw;}
}

写法三在程序上是可行的,但是利用try--catch来捕获强制转换失败的异常,性能影响更大,不是推荐的写法。
在《CLR via C#第四版》中更倾向于写法二。

转载于:https://www.cnblogs.com/sparkleDai/p/7605001.html

is和as在类型转换时的性能差异相关推荐

  1. C++ - 模板函数须要类型转换时使用友元(friend)模板函数

    模板函数须要类型转换时使用友元(friend)模板函数 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24357301 非模板函数 ...

  2. c++ cstring 转换 char_【揭秘】C语言类型转换时发生了什么?

    ID:技术让梦想更伟大 作者:李肖遥 [揭秘]C语言类型转换时发生了什么? 在C语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统,我们常用的算术类型包括两种类型:整数类型和浮点类型. ...

  3. 在c语言中出现的int错误类型,【揭秘】C语言类型转换时发生了什么?

    原标题:[揭秘]C语言类型转换时发生了什么? ID:技术让梦想更伟大 作者:李肖遥 在C语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统,我们常用的算术类型包括两种类型:整数类型和浮 ...

  4. 需要类型转换时请为模板定义非成员函数——条款46

    条款24讨论过为什么唯有non-member函数才有能力"在所有实参身上实施隐式类型转换",该条款并以Rational class的operator*函数为例.我强烈建议你继续看下 ...

  5. 服务器复制性能下降,使用套接字 API 程序将数据复制到 TCP 服务器时Windows性能...

    使用套接字 API 程序将数据复制到 TCP 服务器时Windows性能 12/04/2020 本文内容 本文提供了使用套接字 API 程序将数据复制到 TCP 服务器时出现性能缓慢Windows解决 ...

  6. Mysql之count(*),count(1),count(field)区别、性能差异

    目录 前言 COUNT(*)与 COUNT(1) MyISAM引擎中的COUNT(*)与 COUNT(1) Innodb引擎中的COUNT(*)与 COUNT(1) 实验 原理 结论 Count(1) ...

  7. DL之DNN优化技术:自定义MultiLayerNet【5*100+ReLU】对MNIST数据集训练进而比较三种权重初始值(Xavier参数初始化、He参数初始化)性能差异

    DL之DNN优化技术:自定义MultiLayerNet[5*100+ReLU]对MNIST数据集训练进而比较三种权重初始值(Xavier参数初始化.He参数初始化)性能差异 导读 #思路:观察不同的权 ...

  8. sql in转换为join_同一个SQL语句,为啥性能差异咋就这么大呢?(1分钟系列)

    <数据库允许空值,往往是悲剧的开始>一文通过explain来分析SQL的执行计划,来分析null对索引命中情况的影响,有不少朋友留言,问explain结果中的type字段,ref,ALL等 ...

  9. 剖析 epoll ET/LT 触发方式的性能差异误解(定性分析)

    平时大家使用 epoll 时都知道其事件触发模式有默认的 level-trigger 模式和通过 EPOLLET 启用的 edge-trigger 模式两种.从 epoll 发展历史来看,它刚诞生时只 ...

  10. 同一个SQL语句,为啥性能差异咋就这么大呢?

    墨墨导读:本文和大家说明常见的type结果及代表的含义,并且通过同一个SQL语句的性能差异,说明建对索引多么重要. explain结果中的type字段代表什么意思? MySQL的官网解释非常简洁,只用 ...

最新文章

  1. JSP内置对象基础知识小结
  2. [leetcode] Container With Most Water
  3. 这才是真正的男人的格局
  4. 【HDOJ】4358 Boring counting
  5. 关于redis,学会这8点就够了
  6. java nature_什麼是Eclipse項目的JavaEMFNature nature?
  7. 2016计算机视觉应用专题研究报告
  8. select into
  9. python进阶教程day_Python进阶教程m5–时间,日期
  10. java代码实现顺序队列
  11. 陕西师范大学计算机专业录取,陕西师范大学计算机类专业2016年在湖北理科高考录取最低分数线...
  12. PAT (Advanced Level) Practice 1001 A+B Format (20分)
  13. 虚拟机体验NAS私人云全揭秘:深度揭秘虚拟机安装群晖DSM6.2/6.2.1/6.2.2/6.2.3系统洗白全过程(附赠洗白码)
  14. sql2005数据库置疑修复断电崩溃索引损坏
  15. 阿里云华为云对比分析
  16. 中天易税服务器网站,中天易税网上报税系统
  17. Lync部署之Lync Mobile服务器端的外网设置
  18. 鼠标悬浮显示小手可抓取(CSS伪类)
  19. Xenu's Link Sleuth 的使用
  20. 大学学计算机专业高中怎样选课,高中选课大学对应专业 选什么科目能学的专业多...

热门文章

  1. php判断手机是安卓系统还是ios系统
  2. mysql jdbc 驱动 下载地址官网
  3. c语言有结构体的200行代码,C语言——结构体(示例代码)
  4. matlab红色爱心,心形图的matlab实现
  5. servlet的url-pattern匹配规则详细描述
  6. Android 系统各个版本上https的抓包
  7. c语言数组字节偏移,C语言数组中的地址偏移问题
  8. 5g组网sa方式的演进_关于5G的SA(独立组网)和NSA(非独立组网),这篇通俗易懂!
  9. WPS如何并排放置两张图片_Animate如何制作文字动图动画
  10. 7.4读写锁(ReadWriteLock)