基本上,Nullable<T>
是一个结构,它解释了调用 .HasValue
之类的事情永远不会抛出 NullReferenceException
.我想知道为什么 - 给定一个没有值的可空 - 与 null
进行比较总是true
, 即使使用 Object.ReferenceEquals
,我认为它会返回 false,因为它是一个结构。
CLR 中是否内置了特殊行为来实现这一点?它可能还会解释为什么通用结构约束不允许为 nullable。
最好的问候,
奥利弗·哈纳皮
最佳答案
如果你这样做:
int? x = null;
if (x == null)
将使用 HasValue
。
使用 Object.ReferenceEquals
将首先装箱值 - 并将空值转换为空引用(这确实是特殊的 CLR 行为)。装箱可为空的值类型时,结果要么是空引用,要么是基础 值类型的装箱。换句话说,不存在可空值类型的装箱值这样的东西。
关于c# - 比较可空值和空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3561243/