日期:2014-05-17  浏览次数:20792 次

显式转换与“as”
c#中显式转换的两种方法“(T)obj”和“obj as T”一样吗?如果不一样有什么不同,性能孰优孰劣?
------最佳解决方案--------------------
(T)obj:强制转换,如果不能转换会抛出异常,适用所有类型
obj as T:如果不能转换,则obj得到null值,不会抛出异常,只适用引用类型,对Int32等值类型不能用。
------其他解决方案--------------------
引用:
引用:(T)obj
如果不能转换会报错
as
如果不能转换不报错,返回null
不敢苟同
当T为值类型时,as会报错

as是用于在兼容的引用类型之间进行强制转换
------其他解决方案--------------------
如果不用as,那么一旦你的转型不合适,就会报不能转型的错。如果使用as,如果你进行不合适的转型,那么结果就会变成NULL,不会报错——但是这样一来,你的日志文件里变会记录下空指针异常,而非转型异常。

一般情况下,如果我不确定传进来的东西到底是什么,而我只是试探性的去转,如果转成功了就怎样怎样时,我会用as,然后判断一下是否为null就可以;如果我确定传进来的一定是某类型,如果不是那肯定是上层代码出错了,我会用显示转型。
------其他解决方案--------------------
as 就是包装了一下的强制转换
------其他解决方案--------------------
相当于加了一个try catch
------其他解决方案--------------------
(T)obj
如果不能转换会报错
as
如果不能转换不报错,返回null
------其他解决方案--------------------
引用:
(T)obj
如果不能转换会报错
as
如果不能转换不报错,返回null

不敢苟同
当T为值类型时,as会报错