慎用类型强制转换
类型转换是我们写代码经常需要打交道的事情,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点击订阅我的文章










最新评论
方便提供你自己的博客地址吗?你的博客是刚刚创建的吗?还是已经 创建一段时间了?
你好,按照上面的步骤完成后,搜索时空白,google.sea rch.CustomSearchControl里的id换成你 的博客的id,可以搜到,但我自己咋igoogle申请的...
你好,按照上面的步骤完成后,搜索时空白,google.sea rch.CustomSearchControl里的id...
虽然不是很懂,但还是得说声楼主辛苦了!
谢楼主分享~