浅析is和as五个关键词在类型转换时的拔取

is检查对象是不是匹配与指定项目,重临Boolean值true或者false,值得注意的是,在采纳is举行类型转换的时候是永久不会抛出分外的,例如:

    object o=new Object();

    Boolean a=(o is object);    //返回a=true

    Boolean b=(o is Employee)  //返回b=false

  如若目的是null,则赶回结果为false,原因是从未有过可检查其连串的对象,及null不是目标。

  is操作符的例行用法:

    if(o is Employee){

      Employee e=(Employee)o;//类型转换

    }

C++,  在上边这段代码中实际上对o对象开展了一回品种检查,is操作符首先核实o是否匹配与Employee类型,假设是的话,在if语句内部转换时,CLR(公共语言运行时)会重新核实o是否引用一个Employee。CLR的连串检查增强了安全性,但有目共睹对性能造成一定的损耗,

所以C#提供了AS操作符,目标是简化这种代码的写法,同时提高性能。

  Employee e=o as Employee;

  if(e!=null){

    //使用e

  }

  在这段代码中,CLR核实o是否匹配与Employee类型,假设是,as再次回到对同样对象的非null引用。倘使不般配与Employee类型,as重返null,这样CLR就只校验一遍对象类型,那一个会比is的快慢快很多。

as操作符的行事章程和劫持类型转换一样,只是它永远不抛出异常,假如目的无法转换,则赶回null,所以利用as转换的类型前需判断目的是不是为null,否则会出现非凡,如:

  Object o =new Object();

  Employee e= o as Employee;//此处类型转换失败,e=null;并不会抛出特别

  e.Tostring();// 使用e抛出NullReferenceException分外音信