我想了解 AND (&&) 运行 时间异常

I want to understand AND (&&) run time exception

大家好,今天我的工作是 API.I 当我看到 C# 编译器的不同行为时感到困惑。让我解释一下:

我遇到异常:

If(userLoginModel.UserId>0)
{
//do something
}
else{
//do something
}

异常:{"Object reference not set to an instance of an object."}

是的,它是空的; 但是如果写 :

if (userLoginReturnModel != null && userLoginReturnModel.UserId >0)
{
//do something
}
else
{
//do something
}

这段代码没有抛出任何异常。

注意:我的问题是为什么编译器没有在第二个代码上抛出任何异常,因为 if 中有 && 条件,当编译器检查 userLoginReturnModel.userId > 0 时,这也需要抛出异常,因为对象为空。正如我们所知,这两个条件都将被检查。任何有很好解释的答案。

如果是:

if (userLoginReturnModel != null && userLoginReturnModel.UserId >0)

如果第一个条件为假,则不检查下一个条件(因为没有必要这样做 - false && 任何东西都会给出 false)。

类似于|| - 如果第一个为真,则不检查下一个(不需要 - 真 || 任何东西都为真)。

在这种情况下,如果 userLoginReturnModel 为空,您将拥有:

if ( false && ...

false 后需要检查条件吗?假 && 真仍然是假的。所以其余条件无关紧要,不会被检查。