每当我对 Nullable\xc2\xa0property 调用 PropertyInfo.GetValue 时,我都会获取可为 null 的结构的实际值,而不是结构本身。为什么?它是嵌入到语言中并且仅适用于 Nullable 类型还是自定义类可以与其他类型具有相同的功能。
\n这是因为PropertyInfo.GetValue的返回类型是object,这意味着所有值类型都是装箱的。
现在,可空类型的装箱方式与其他类型不同:
HasValue == false将被装箱到 null 引用,并且HasValue == true将像底层不可空类型一样被装箱。可空性信息“丢失”。它是否融入到语言中并且仅适用于 Nullable 类型 [...]
确切地说,(仅)Nullable 结构受到 CLR 的特殊对待。
这种特殊待遇的原因将在下面的问题中详细解释。基本上,它可以归结为一致的愿望myNullable == null和myBoxedNullable == null行为: