【发布时间】:2019-01-10 07:51:28
【问题描述】:
大家好,今天我正在制作 API。当我看到 C# 编译器的不同行为时,我感到很困惑。让我解释一下:
我得到异常:
If(userLoginModel.UserId>0)
{
//do something
}
else{
//do something
}
异常:{“对象引用未设置为对象的实例。”}
是的,它是空的; 但是如果写:
if (userLoginReturnModel != null && userLoginReturnModel.UserId >0)
{
//do something
}
else
{
//do something
}
这段代码没有抛出任何异常。
注意:我的问题是为什么编译器不会在第二个代码上抛出任何异常,因为如果存在 && 条件,那么当编译器检查 userLoginReturnModel.userId > 0 时,这也需要抛出异常,因为对象是空值。正如我们所知,这两个条件都将在 if 中进行检查。任何有很好解释的答案。
【问题讨论】:
-
如果我让您从书柜中取回我的书,但我没有书柜,那就有问题了 - 对吧?与 null 相同。如果您尝试访问
userLoginReturnModel的实例,但您没有,那就是个问题。&&使 if 语句短路,因此它永远不会执行后半部分。 -
请再次阅读问题@John。谢谢
-
您的第一条评论不匹配。
-
@John 问题实际上是为什么在第二个示例中只检查第一个条件。
-
@John,问题是关于
&&的行为以及它如何避免NullReferenceException,而不是如何解决一个问题,因此不可能被骗问题
标签: c# exception-handling compiler-errors nullreferenceexception