为什么Nullable <T>,struct,允许'null'

Sad*_*diq 1 c#

Nullable是一个结构.我知道结构不能被指定为"空".那么我们如何才能将Nullable的对象赋给null呢?是什么原因?

p.s*_*w.g 6

它实际上并不接受值null; 它只是具有语法糖,可以让它像它一样行动null.该类型实际上看起来有点像这样:

struct Nullable<T>
{
    private bool hasValue;
    private T value;
}
Run Code Online (Sandbox Code Playgroud)

所以当它初始化时hasValue == false,和value == default(T).

当你编写代码时

int? i = null;
Run Code Online (Sandbox Code Playgroud)

C#编译器实际上是在幕后执行此操作:

Nullable<T> i = new Nullable<T>();
Run Code Online (Sandbox Code Playgroud)

在转换nullint?运行时也会进行类似的检查.

进一步阅读