.NET 中类型转换经常使用到is 和as
is 和as 在执行时永远不会抛出异常
is 正常使用:
if(obj is User){
User u = (User)obj;
}
is就是判断是否是某类型,返回值是true 和false 如图例子 obj不是User类型或者是null则一直返回false,否则返回true。
as 使用:
User u = obj as User;
if(u!=null){
//ur code...
}
as 是不管你啥类型直接转换,类似于强制类型转换,不过区别是as 不会抛异常(上面说过)。就例子来讲obj如果是User类型则转换成功u就是User类型的对象,如果不是User类型则返回null,所以写完后要判断是否为null,这一点很重要。
上面两者用哪个都可以,细微的讲就是性能的问题了,看过CLR那本书就可以知道。
使用is时,会检查一次obj是否是User类型,成功后使用强制转换时又会去检查一次;
而使用as时只会检查一次obj是否是User类型,成功后多了一次是否等于空的判断,但是这个判断比检查类型所损耗性能要低
所以使用时还是建议使用下面一种方式。