为可空类型重载=运算符?

时间:2014-02-10 21:09:16

标签: c# operator-overloading nullable

MSDN提到无法重载=运算符。

如何将Nullable类型分配为null?

int? i = null;

除此之外,我可以使用自己的泛型类型以及如何实现吗?

4 个答案:

答案 0 :(得分:2)

隐式转换而不是赋值运算符允许分配nullhttp://msdn.microsoft.com/en-us/library/ms131346(v=vs.110).aspx

  

如果value参数为 not null ,则为new的Value属性   Nullable<T>值初始化为value参数和   HasValue属性已初始化为true。如果值参数是    null ,初始化新ValueNullable<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为框,如果为真,则将基础值展开并装箱。你不可能为自己的类型做这件事。