答案 0 :(得分:2)
隐式转换而不是赋值运算符允许分配null
:http://msdn.microsoft.com/en-us/library/ms131346(v=vs.110).aspx
如果value参数为 not null ,则为new的Value属性
Nullable<T>
值初始化为value参数和HasValue
属性已初始化为true
。如果值参数是 null ,初始化新Value
值的Nullable<T>
属性 到默认值,这是所有二进制零的值, 并且HasValue
属性初始化为false。
答案 1 :(得分:2)
基本上Tim的评论(编辑:现在回答= D)说 - 从null文字进行隐式转换,而不是赋值运算符的重载。
来自C#language spec(我看的是5.0版) - 第"6.1.5 Null literal conversions"
节:
存在从null文字到任何可空的隐式转换 类型。此转换生成给定的空值(第4.1.10节) 可空类型。
答案 2 :(得分:1)
Nullable类型是struct
的实例System.Nullable<T>.
可以指定或可为空的类型被指定为可为空(T)的泛型类型。
此处有更多信息... http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx
在您的示例中,您实际上并未将int设置为null,而是将结构上的值设置为null。
答案 3 :(得分:1)
Nullable
类型有特殊的编译器支持。
无法为null
创建用户定义的隐式转换。他们将它构建到语言(和运行时)中,而不是在语言之上创建Nullable
,因为有很多BCL类。
有趣的是,这不是为Nullable
创建的唯一特殊支持。当您点击Nullable<T>
时,它实际上并未打包Nullable
个对象,永远。如果HasValue
为false,则null
为框,如果为真,则将基础值展开并装箱。你不可能为自己的类型做这件事。