Nullable <T>与类似的自定义C#结构有何不同?

Eld*_*rum 4 c# language-features boxing nullable

Nullable微优化(第一部分)中,Eric提到了Nullable<T>一种奇怪的拳击行为,这种行为无法通过类似的用户定义类型实现.

C#语言赋予预定义Nullable<T>类型的特殊功能有哪些?特别是那些无法在某种MyNullable类型上工作的.

当然,Nullable<T>有特殊的语法糖T?,但我的问题更多是关于语义.

Eri*_*ert 11

我得到的是:没有盒装可空的东西.当你装箱时int,你会得到一个盒装的参考int.当你装箱时int?,你得到一个空引用或对盒装的引用int.你永远不会得到盒装int?.

您可以轻松创建自己的Optional<T>结构,但不能实现具有该装箱行为的结构.Nullable<T>特殊行为融入了运行时.

这一事实导致了许多奇怪的事情.例如:

而且还有其他方式,这种Nullable<T>类型是"神奇的".例如,尽管它是结构类型,但它不满足结构约束.您无法创建具有该属性的自己的结构.

  • @EldritchConundrum:不是.相反,奇怪的是可空值语义和可空引用语义之间不匹配的结果.故事的寓意是:在v1.0中为类型系统添加可空性,而不是v2.0.如果同时发明了可空引用类型和可空值类型,它们将更加相似. (2认同)