当前位置: 首页 > article >正文

C#Is和As的区别:

1、Is和As的区别:

使用is操作符,is 检查对象是否兼容于指定类型,返回 Boolean 值 true 或 false。注意, is 操作符永远不抛出异常。如果对象引用 nullis 操作符总是返回 false,因为没有可检查其类型的对象。

if (o is Employee){
    Employee e = (Employee) o;
    // 在 if 语句剩余的部分中使用 e
}

 CLR 实际检查两次对象类型。 is 操作符首先核实 o 是否兼容于 Employee 类型。如果是,在 if 语句内部转型时, CLR 的类型检查增强了安全性,但无疑会对性能造成一定影响。这是因为 CLR 首先必须判断变量(o)引用的对象的实际类型。然后, CLR 必须遍历继承层次结构,用每个基类型去核对指定的类型(Employee)。由于这是一个相当常用的编程模式,所以 C# 专门提供了 as 操作符,目的就是简化这种代码的写法 ,同时提升其性能。

Employee e = o as Employee;
if (e != null) {
    // 在 if 语句中使用 e
}

 在这段代码中,CLR 核实 o 是否兼容于 Employee 类型;如果是, as 返回对同一个对象的非 null 引用。如果 o 不兼容于 Employee 类型, as 返回 null。注意, as 操作符造成 CLR 只校验一次对象类型。if 语句只检查 e 是否为 null;这个检查的速度比校验对象的类型快得多。

as 操作符的工作方式与强制类型转换一样,只是它永远不抛出异常——相反,如果对象不能转型,结果就是null。 所以,正确做法是检查最终生成的引用是否为 null。企图直接使用最终生成的引用会抛出 System.NullReferenceException 异常。


http://www.kler.cn/news/289797.html

相关文章:

  • 工业图像输出卡设计原理图:FMC214-基于FMC兼容1.8V IO的Full Camera Link 输出子卡
  • 排查 Kafka 生产者服务问题的实战经验总结(dubbo的Serializable 问题)
  • ISO 26262中的失效率计算:SN 29500-11 Expected values for contactors
  • Spark MLlib模型训练—回归算法 Isotonic Regression
  • 浅谈常见的分布式ID生成方案
  • python图像灰度直方图对比分析
  • ECMAScript 与 JavaScript:主要区别与实例说明
  • Flutter 小技巧之 Row/Column 即将支持 Flex.spacing
  • Tiktok测评防关联秘籍:矩阵自养号策略全面解析
  • R语言 | 文件读取
  • 如何构建Java SpringBoot在线培训平台?集成Vue,实现课程管理,打造互动学习环境
  • 【nnUNet】环境安装
  • Ubuntu22.04服务器重启后没网络IP丢失
  • 24最新『ComfyUI』入门到入坟全套教程!!看到就是赚到!赶紧收藏!
  • 基于树莓派的儿童音频播发器—Yoto
  • [嵌入式] 设备没有联网的情况下如何安装库
  • Unity中保存数据的方法
  • 【3.8】贪心算法-解无重叠区间
  • vscode和edge浏览器等鼠标输入光标变透明
  • github中action作用和讲解
  • [物理专题]经典浮力题目的Fh图像绘制
  • Profinet 从站转 EtherNet/IP 从站网关
  • Django+Vue二手交易平台的设计与实现
  • 使用Redis如何实现集群会话同步?
  • 【RabbitMQ】核心概念
  • 【Go - vendor, 本地, 独立依赖包】
  • 【杭州】目前就业情况-自述
  • JDBC |封装JDBCUtils|PreparedStatement|事务|批处理|数据库连接池| Blob类型数据的读写|Apache—DBUtils简介
  • 一般位置下的3D齐次旋转矩阵
  • HarmonyOS开发实战( Beta5版)应用性能工具CPU Profiler的使用规范