Consider the following code:
bool x;
bool? y = null;
x = y?? true;
将
bool?
赋值给bool
是一个编译时错误,但是上面的代码在编译和运行时都成功了。为什么?虽然第三个语句确保我们永远不会将null
分配给x
,但是如果y
不为null,我们仍然将bool?
分配给bool
,所以从编译器的角度来看,这应该是一个错误,不是吗?还是说C#编译器足够聪明,能够找到一段代码不可能创建一个
null
被分配给x
的情况?
??
运算符是什么吗?它的意思是“如果左边为空,则使用右边”。如果你也将右边设为bool?
,它将不起作用。 - Scott Chamberlainy?? true
) 是一个单一表达式,它不会是bool?
类型(请参见 Jon 的答案以获取解释)。 - dotNET