这是根据提升的二元运算符的规范.从§7.2.7开始:
对于二元运算符
+ - * / % & | ^ << >>
如果操作数和结果类型都是非可空值类型,则存在提升形式的运算符.通过向
?
每个操作数和结果类型添加单个修饰符来构造提升形式.如果一个或两个操作数为空,则提升的运算符产生空值(例外是bool?类型的&和|运算符,如第7.10.3节中所述).否则,提升的运算符解包操作数,应用基础运算符,并包装结果.
原因是:你要考虑一个null
可以为空的类型,意思是"我不知道它的价值是什么." "我不知道"加一个的结果是什么?"我不知道." 因此,结果应该是null
.
这是根据提升的二元运算符的规范.从§7.2.7开始:
对于二元运算符
+ - * / % & | ^ << >>
如果操作数和结果类型都是非可空值类型,则存在提升形式的运算符.通过向
?
每个操作数和结果类型添加单个修饰符来构造提升形式.如果一个或两个操作数为空,则提升的运算符产生空值(例外是bool?类型的&和|运算符,如第7.10.3节中所述).否则,提升的运算符解包操作数,应用基础运算符,并包装结果.
原因是:你要考虑一个null
可以为空的类型,意思是"我不知道它的价值是什么." "我不知道"加一个的结果是什么?"我不知道." 因此,结果应该是null
.
Nullables实际上从来就不是空引用.它们始终是对象引用.其内部类覆盖了==
和=
运营商.如果将它们与null进行比较,它们将返回HasValue
属性的值.