为什么可以为Nullable变量赋值?

Tot*_*oto 1 c# nullable

为什么下面的行编译?对我来说,Nullable<double>是一个结构,我们不能为这种类型的变量赋值"null".

        Nullable<double> someVar = null;
Run Code Online (Sandbox Code Playgroud)

赋值运算符不应该是可覆盖的,但可能是一些语法糖,编译器知道它必须将其更改为?

        Nullable<double> someVar = new Nullable<double>();
        someVar.Value = null;
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 6

编译器和语言规范具有特殊的魔法支持,使null文字可转换为Nullable<T>.

规范说:

  • 空文字.具有此分类的表达式可以隐式转换为引用类型或可空类型.