在数据类型转换中,C#相对其它语言来说是比较严格的,要求显式进行数据转化。
        为了操作方便,C#也提供了一种is操作符进行转换,十分方便,它自动检查时局是否和类型兼容,并返回结果。而且它不会抛出异常。如果对象引用为null,则is总返回false。

if (cls1 is Class2) 
            {
                Class2 cls2 = (Class2)cls1;
            }
            else
                System.Console.WriteLine("Error 2!");
      平时自己也多用这种方式来做类型转化的,但今天看了个文章,对比了另外一种方式,as操作符进行转换,才知道as比is可以稍微地提高性能的。

Class2 cls2 = cls1 as Class2;
            if (cls2!=null)
               System.Console.WriteLine("Ok");
            else
               System.Console.WriteLine("Error!");

as稍微不同,它检查引用对象是否兼容,如果不兼容则返回null,因此需要做null的判断。

--------------------------------------------------------------------------------

对比两种方式,is需要做两次对象的类型检查,而as需要做一次对象类型检查,再加一次null的检查,而null检查开销比对象类型检查少。相对as的方法效率高些。

看来日常写的一些习惯性的代码总可以找到改进的地方的,将新的方式再作为习惯不是更好?

C#中is vs as相关推荐

  1. GNU Make 使用手册(于凤昌中译版)

    GNU Make 使用手册(中译版) 翻译:于凤昌 GNU make Version 3.79 April 2000 Richard M. Stallman and Roland McGrath 1 ...

  2. 面试:第十二章:所有总结

    Java基础 java基本类型哪些,所占字节 byte :1个字节 short :2个字节 char :2个字节 int :4个字节 long :8个字节 float :4个字节 double :8个 ...

  3. linux内核分析(转自某位大哥网上的笔记)

    启动 当PC启动时,Intel系列的CPU首先进入的是实模式,并开始执行位于地址0xFFFF0处的代码,也就是ROM-BIOS起始位置的代码.BIOS先进行一系列的系统自检,然后初始化位于地址0的中断 ...

  4. golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用

    RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...

  5. 总结一下在使用某里云服务器的过程中出现过的一些问题

    此文总结在使用阿里云的过程中出现过的问题   想起来就记录一下 本人为言行负责! 海内选择腾讯华为,共勉! k8s不同命名空间的配置文件串掉了 k8s集群服务器购买上后,无法使用外网.连续购买了4台然 ...

  6. Kubernetes 中 设置pod不部署在同一台节点上

    在k8s中,节点的调度主要由亲和性和污点来进行控制的.   而在亲和性部分由分为了节点亲和性和节点反亲和性.   节点亲和性是指在pod部署时,尽量(软策略)或者必须满足(硬策略)部署在某些节点上. ...

  7. 在Dockerfile中设置G1垃圾回收器参数

    在Dockerfile中设置G1垃圾回收器参数 ENV JAVA_OPTS="\ -server \ -XX:SurvivorRatio=8 \ -XX:+DisableExplicitGC ...

  8. 在kotlin companion object中读取Bean,注入Bean对象

    在kotlin companion object中读取Bean,注入Bean对象 在使用kotlin时,或多或少地会使用到一些公共组件,如 http. mongo. redis相关的组件.   使用组 ...

  9. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  10. 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法

    数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...

最新文章

  1. 计算机视觉的数据增广技术大盘点!附涨点神器,已开源!
  2. tensor_proto.raw_data().empty() || !tensor_proto.float_data().empty() || !tensor_proto.double_data()
  3. VTK:演示在多边形数据上使用裁剪用法实战
  4. 【渝粤教育】国家开放大学2018年秋季 0017-22T大学英语 参考试题
  5. 数据分析:复杂业务场景下,量化评估流程
  6. CV Papers|计算机视觉论文推荐周报20200503期
  7. 大数据 -- 安装Hadoop-单机模式(1)
  8. oc-10-对象做参数
  9. 什么是Maven神器?
  10. Easy UI combobox实现类似 Select2的效果,下拉带搜索框
  11. 微星笔记本win键失灵了怎么解决
  12. Kubernetes入门培训(内含PPT)
  13. 测试对比度的软件,WCAG颜色对比度检测工具,网页及App文字背景配色检测软件...
  14. 计算机怎样更新卡驱动,显卡驱动怎么升级
  15. setValue: forKey: 和 setValue: forKeyPath:
  16. 阿里巴巴线上面试总结
  17. quicktime for java,QuickTime是什么意思
  18. 记录一次jeecms修改子栏目或子栏目进行排序时,服务请求发生了错误,
  19. css Flex布局第一部分(基础)
  20. php导入word文件怎么打开,phpword 导入word

热门文章

  1. 如何做一个合格的面试官?
  2. 踵事增华:新形势下如何高效撰写科技论文!
  3. 专题导读:高性能计算虚拟数据空间
  4. 宏基因组大数据分析的质量控制流程规范
  5. 【项目管理】IT项目成功
  6. 【计算机组成原理】磁盘存储器
  7. 求子集元素之和(洛谷P2415题题解,Java语言描述)
  8. 分析阶段的类图和设计阶段的类图有什么区别?
  9. # WordPress 除了主页以外的页面都提示Not Found的问题(Centos)
  10. 关于WPF中Popup中的一些用法的总结