在c#语言中关于类型的判断与转换有is和as这2种操做符,具体用法以下:编程
is检查一个对象是否兼任与指定的类型,并返回一个Boolean值:true或false,主要,is操做符永远不会抛出异常,一下代码进行了演示:c#
object o = new object(); Boolean b1=(o is object); //b1为true Boolean b2 = (o is Boolean); //b1为false
若是对象引用是Null,is操做符老是返回false,由于没有可检查其类型的对象。安全
is操做符同城像下面这样使用性能
if(o is Emplyoee){ Employee e(Employee) o; 在if语句剩余的部分中使用e }
在这段代码中,ClR实际回检查两次对象的类型。is操做符首先核实o是否兼任与Employee类型,若是是,那么在if语句内部执行转换时,CLR再次核实o是否引用一个Employee。CLR的类型检查加强了安全性,当无疑也会对性能形成必定的影响。这是由于CLR首先必须判断变量(o)引用的对象的实际类型,而后,CLR必须遍历继承层次的结构,用每一个基类型去核对指定的类型,因为这是一个至关经常使用的编程模式,因此c#专门提供了as操做符,目的就是简化这种代码的写法,同时提高其性能。code
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,因此,正确的作法是检查最终生成的引用是否为nullblog