标签:
先上一段代码:
public static TOut? ConvertTo<TOut> ( Double i_input ) where TOut: struct { return i_input as TOut?; }
这是一个很普通的泛型方法,有以下几个特点:
1)将Double类型的数值转化为一个可空类型的实例返回,同时这个返回的实例的基本类型是值类型
2)这种转换使用了as操作符,as操作符的一个特点是,如果转换失败,返回的就是null。
很不幸的是,但凡TOut不是Double类型,这个转换返回的一定是NULL.
原因如下:
1 Double 经过as操作符的时候,会进行一个Boxing操作,Double,那么就变成了一个包含了Double的引用,后面尝试转换一个可空类型,很显然,非Double类型的装箱结果--一个引用,是不会跟非Double的可能类型兼容,因为一个T?只能接收 null 或者 T的一个实例
标签:
原文地址:http://www.cnblogs.com/rainychan/p/4976160.html