如何在.NET中表示null

Ale*_*lex 5 .net memory null

我正和同事谈话,并且出现了null的主题.他在幕后告诉我,在.NET中它只是一个非常小的数字.我一直认为对象只是没有指向堆上任何内存的指针,但我不确定.

所以我希望社区可以为我们清理它; P

lep*_*pie 16

它是0.

在ECMA-335规范中从ldnull剪断:

可能会认为ldnull是多余的:为什么不使用ldc.i4.0或ldc.i8.0呢?答案是ldnull提供了一个与大小无关的null - 类似于ldc.i指令,它不存在.但是,即使CIL要包含ldc.i指令,它仍然有利于验证算法保留ldnull指令,因为它使类型跟踪更容易.

  • @lomaxx:null绝对是一个值。你可以用它做任何你可以用另一个值做的事情——传递它,将它分配给一个变量等等。它的*按位表示*全是零。 (3认同)

Roa*_*ior 5

当可空类型实例设置为null时,其基础值为零.

更具体地说,可空类型是一种结构,它将底层类型的值与布尔空指示符组合在一起.可空类型的实例具有两个公共只读属性:bool类型的HasValue和可空类型的基础类型的Value.

对于非null实例,HasValue为true,对于null实例,则为false.

因此,当HasValue为true时,Value属性返回包含的值.当HasValue为false时,尝试访问Value属性会引发异常.但是如果你可以访问它,你会发现它包含零.