代码之家  ›  专栏  ›  技术社区  ›  Dan Davies Brackett

是C#int吗?当hasvalue=true时,bool总是被装箱?

  •  11
  • Dan Davies Brackett  · 技术社区  · 15 年前

    This MSDN reference 似乎表明 int? (或任何 Nullable<T> int ). 是这样吗?

    3 回复  |  直到 15 年前
        1
  •  13
  •   Justin Niessner    15 年前

    该页面指的是当您装箱时 Nullable<T> 结构,而不是结构本身内部的值。

    存储可空类型时不涉及装箱,除非您尝试装箱可空类型本身:

    int? a = 42; // no boxing
    int? n = null; // no boxing
    
    object nObj = n; // no boxing
    object aObj = a; // only now will boxing occur
    

    这种行为与装箱一个常规值类型时没有什么不同(除了处理空的情况),所以这确实是意料之中的。

        2
  •  3
  •   BC.    15 年前

    不可以。可为null的对象是一个泛型结构,在内部处理T的值而不进行装箱。

        3
  •  2
  •   Tim Robinson    15 年前

    事实并非如此。 Nullable<T> 是通用的,所以它持有真实的 int bool .

    MSDN页面讨论的是当你把一个盒子 Nullable<int> Nullable<bool> . 如果您从未将可为null的结构赋给 object