您的位置:首页 > 其它

当As操作符遇上Nullable

2015-11-18 22:48 225 查看
  先上一段代码:

  

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的一个实例
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: