当As操作符遇上Nullable

  先上一段代码:

  

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的一个实例

posted on 2015-11-18 22:48  花雨树  阅读(198)  评论(0编辑  收藏  举报