为什么&&和|| 不能用于可空类型?

new*_*man 8 .net c# nullable

可能重复:
AND操作不能在可空的bool之间应用.

我期待类似的行为,如+或*.因此,如果任何操作数为null,则它应返回null,但如果在&&或||中使用它,则编译会抱怨.为什么?

为了说明这一点:

//this compiles
int? x = null;
int? y = null;
var z = x*y;

// this doesn't compile
bool? x = null;
bool? y = null;
if(x && y)
    ....
Run Code Online (Sandbox Code Playgroud)

pic*_*ypg 10

如果要返回null,则使布尔要求无效.

|| &&

基本上,它将允许除了bool(具体地null)在if语句中的值,该语句将是未定义的行为,因为if语句需要boolean表达式.

有趣的是,这是Java和C#不同的领域之一.Java也需要if语句中的布尔值,但它们允许使用它们的版本bool?(Nullable<bool>或者只是Boolean在Java中)null.这导致NullPointerException在运行时出现一些意外情况,C#正在避免此要求.