反射和可为 Null<T>

Kri*_*gyi 2 c#

每当我对 Nullable\xc2\xa0property 调用 PropertyInfo.GetValue 时,我都会获取可为 null 的结构的实际值,而不是结构本身。为什么?它是嵌入到语言中并且仅适用于 Nullable 类型还是自定义类可以与其他类型具有相同的功能。

\n

Hei*_*nzi 5

这是因为PropertyInfo.GetValue的返回类型是object,这意味着所有值类型都是装箱的

现在,可空类型的装箱方式与其他类型不同

  • 可为 null 的值HasValue == false将被装箱到 null 引用,并且
  • 可空值HasValue == true将像底层不可空类型一样被装箱。可空性信息“丢失”。

它是否融入到语言中并且仅适用于 Nullable 类型 [...]

确切地说,(仅)Nullable 结构受到 CLR 的特殊对待。

这种特殊待遇的原因将在下面的问题中详细解释。基本上,它可以归结为一致的愿望myNullable == nullmyBoxedNullable == null行为: