首页 > 其他随笔 > 慎用类型强制转换

慎用类型强制转换

其他随笔

类型转换是我们写代码经常需要打交道的事情,C#中类型转换有两种常见的形式:

(BaseClass)obj

obj as BaseClass

同时,Convert类也提供了很多常用类型的转换接口。

我接下来要说的是第一种转换形式。

当使用第一种转换形式的时候,要求obj是null,或者是一个BaseClass类或其派生类实例。否则转换会抛出异常(使用后一种形式则返回null)。这倒好理解,但是对于简单类型,就比较容易出错了。

object obj = 2;
double i = (double)obj;

上面的代码会抛出一个InvalidCastException,这是因为使用前一种类型转换的时候,CLR运行时会进行类型匹配,因为obj的类型(int)和double不相匹配——虽然看起来是无损精度的转换——因此抛出异常。从这个例子中我们可以得到一个结论:

除非你非常确定你要转换的源对象是什么类型,否则千万使用第一种形式,特别是对于简单类型更是如此。

对于简单类型,建议采用Convert.ToXXX接口实现转换,可维护性高一些。

——Kevin Yang

本博客遵循CC协议2.5,即署名-非商业性使用-相同方式共享
写作很辛苦,转载请注明作者以及原文链接~
如果你喜欢我的文章,你可以订阅我的博客:-D点击订阅我的文章

  1. X﹏X 到现在还没有评论~
  1. 暂时没有trackbacks.