首页 > 代码库 > 如何避免类型转换时的异常

如何避免类型转换时的异常

分析问题

  程序员经常会面临一些类型转行的工作,其中有些是确定可转换的,例如把一个类型对象转换成基类对象,而有些则是带有尝试性的,譬如把基类引用的对象转换成子类,当执行这样的尝试性转换时,程序员就应该做好捕捉异常的准备。

  当一个不正确的类型转行发生时,就会产生InvalidCastException异常,程序员有时候会用try、catch块做一些尝试性的类型转换,这样的代码没有任何错误,但是性能却相当糟糕。异常是一种耗费资源的机制,每当异常被抛出时,异常堆栈将被建立,异常信息将被加载,而通常这些工作成本相对较高,并且在尝试性转换时,这些信息都没有意义。所以C#提供了另外一种语法来进行尝试性的类型转换,那就是关键字is和as所做的工作。

  is语句用来判断一个对象是否可以转换为另一个对象,如果可以则返回true,不行则返回false。as语句实现了大致类似的功能,它对对象进行尝试性的检查,如果可以转换成指定对象,则返回转化后的引用,不可以的话则返回null。

答案

  用is和as语句代替强制转换,可以有效地避免InvalidCastExcepiton异常,执行效率相对较高。读者应该使用is或者as语句来代替直接使用强制转换。