gpt4 book ai didi

.net - 为什么 Nullable 被视为值类型?

转载 作者:行者123 更新时间:2023-12-03 21:04:33 28 4
gpt4 key购买 nike

您是否尝试过使用 Convert.ChangeType()将值转换为 Nullable<T> 的方法类型?尴尬的是,它会抛出一个 InvalidCastException说“空对象不能转换为值类型”。

尝试在您的即时窗口上运行它:?System.Convert.ChangeType(null, typeof(int?))
由于某些晦涩的原因,Nullables 被认为是值类型。例如,typeof(int?).IsValueType返回 true .

对我来说,自从 Nullable<T>接受 null ,它是一个类类型,而不是一个值类型。有谁知道为什么它会以不同的方式实现?

最佳答案

System.Nullable<T>从技术上讲,它是一种结构,因此它是一种值类型(nullNullable<T> 值与空引用并不完全相同。它是一个 bool 标志,表示缺少值。)但是,它被特殊对待运行时,这使它成为一个尴尬的值类型。首先,它不满足where T : struct类型约束(它也不满足 where T : class,就其值(value)而言)。其次,它表现出一种有趣的拳击行为。拳击甲Nullable<T>将导致:

  • null引用,如果值为 null .
  • 基础类型的装箱值(如果它实际上包含一个值)。也就是说,在声明中:
    int? x = 2;
    object y = x;
    y不是盒装Nullable<int> .它只是一个盒装 int .您可以取消装箱 T 类型的任何装箱值至 Nullable<T> (当然还有 T )。类型转换一个 null引用 Nullable<T>结果是 null值(如您所料)。

  • 运行时的这种特殊处理使可空类型的工作方式更类似于 null在引用类型中工作。

    关于.net - 为什么 Nullable<T> 被视为值类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2031008/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com