【问题标题】:Nullable<> types are a BCL, CLR, or both implementation?Nullable<> 类型是 BCL、CLR 还是两者都实现?
【发布时间】:2011-06-09 07:39:14
【问题描述】:

前段时间我认为 Nullable 值类型是类,封装了值类型和 HasValue 的 bool。使用一些隐式的 null 强制转换操作符,刚刚在 BCL 中实现。

但是作为一个结构,如何实现呢? Nullable 结构对于 CLR 来说是“特殊的”?

【问题讨论】:

  • Nullable 是一个静态类,可与Nullable&lt;T&gt; 结构对象一起使用(以防出现任何混淆)。

标签: c# clr nullable base-class-library


【解决方案1】:

Nullable&lt;T&gt; 被定义为普通结构,但是 CLR 中有特殊的钩子可以根据HasValue 属性将[mscorlib]System.Nullable`1 的实例装箱/拆箱为空。这个here有更多详细信息

【讨论】:

  • 有趣的作品。我个人不喜欢通过测试 null 来测试空 nullables 的想法。在没有这种期望的情况下,无论T 是类还是引用类型,都有可能让Dictionary.TryGetValue 返回T?。如果键存在且其值为null,则返回的项目将HasValue 报告为真,Value 报告为空。事实上,没有暗示类型支持 null 的通用约束,因此没有有效的方法来测试 null 。
【解决方案2】:

这是关于 Nullable Types 的 MSDN 文章。

http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=VS.100).aspx

我不确定你想用 Nullable 做什么,除非你误解 Nullable 类型是 System.Nullable&lt;T&gt; 结构的实例。

【讨论】:

    【解决方案3】:

    Nullable&lt;&gt; 是在 mscorlib 中实现的结构。

    在 C# 编译器中有一个特殊之处,它将 X? 识别为 Nullable&lt;X&gt; 的别名。

    【讨论】:

      猜你喜欢
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 2016-08-27
      • 2011-03-14
      相关资源
      最近更新 更多