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 异常。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值