过去对于这还不是怎么了解,今天自己细细的读了这方面的书。所以写个博客分享下吧。
在C#语言中进行类型转换的另一种方式是使用is操作符,is检查一个对象是否兼容指定的类型,并且返回一个boolean值,要注意的地方就是is操作符永远不会抛出异常。它的用法呢就是诸如这样:
if(o is Student){ Student stu = (Student)o;}
在这段代码中中CLR实际会检查两次对象的类型,is操作符首先先核实o是否兼容于Student类型,如果是,那么在if语句内部执行转型时,CLR再次核实o是否引用一个Student。可话又说回来了,CLR在这是增强了安全性,但是,无疑对性能造成了一定的影响,。这是因为CLR首先必须判断变量0引用的对象的实际类型,之后CLR必须遍历层次结构。但是在C#中还提供了as操作符。其目的就是简化这种代码的写法,同时呢,也提高了性能
Student stu = o as Student;if(stu != null){ //you code here }
as操作符永远也不会抛出一个异常,如果不能转型则结果就是一个null,正确的做法就是检查最终生成的应用是否为null
参考:CLR Via C#