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

时间:2016-08-15 18:41:12

标签: c# nullable

为什么以下行编译?对我来说,//Must remove $ and any commas y = thisVal.replace(',',''); z = y.replace('$',''); //Error if this is not a number if (isNaN(z)) { thisCmp.className = thisCmp.className + " errorRed"; return } else { thisCmp.className = thisCmp.className.replace(" errorRed",""); } //Must fix to 2 decimal places if ((typeof z) === 'string'){ z = parseFloat(z).toFixed(2)} else { z = z.toFixed(2) } 是一个结构,我们不能为这个类型的变量赋值“null”。

Nullable<double>

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

        Nullable<double> someVar = null;

1 个答案:

答案 0 :(得分:4)

这是在规范上。

第6.1.5节说:

  

6.1.5空文字转换

     

存在从null文字到任何可空类型的隐式转换。此转换生成给定可空类型

的空值(第4.1.10节)

4.1.10说:

  

4.1.10可空类型

     

可空类型可以表示其基础类型的所有值加上额外的空值。可空类型写为T ?,其中T是基础类型。此语法是System.Nullable的简写,这两种形式可以互换使用。

     

...

     

隐式转换可以从空文字到T吗? (§6.1.5)和从T到T? (第6.1.4节)

(大胆是我的)