当前位置: 首页 > 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/a/289797.html

相关文章:

  • HarmonyOS的@State装饰器的底层实现
  • 06.VSCODE:备战大项目,CMake专项配置
  • 如何使用ffmpeg命令行进行录屏
  • 服务器显卡和桌面pc显卡有什么不同
  • 文件夹被占用了无法删除怎么办?强制粉碎文件夹你可以这样操作
  • Elastic Observability 8.16:增强的 OpenTelemetry 支持、高级日志分析和简化的入门流程
  • 工业图像输出卡设计原理图: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作用和讲解