慎用类型强制转换
类型转换是我们写代码经常需要打交道的事情,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接口实现转换,可维护性高一些。
你可能对下面的文章感兴趣
本博客遵循CC协议2.5,即署名-非商业性使用-相同方式共享
写作很辛苦,转载请注明作者以及原文链接~
如果你喜欢我的文章,你可以订阅我的博客:-D点击订阅我的文章










最新评论
@Kevin Yang 3G上网不要钱的 但是推送就没办法了 TOT
我都没绑定信用卡他怎么扣我的钱呢?3G流量本身不收费的好像, 但是如果用到了亚马逊的特定服务是要收费的,例如订阅免费的书刊 杂志。如果是你自己给自己推送的那么是不用收费的。
3g是要钱的…
精彩,睇书睇微软都唔够清楚,睇你的文档,一次就懂,好文好文
讲的很详细,就是有点儿长了,回去试一下