Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我想了解和(&;)运行时异常_C#_Exception Handling_Compiler Errors_Nullreferenceexception - Fatal编程技术网

C# 我想了解和(&;)运行时异常

C# 我想了解和(&;)运行时异常,c#,exception-handling,compiler-errors,nullreferenceexception,C#,Exception Handling,Compiler Errors,Nullreferenceexception,大家好,今天我正在制作API。当我看到C#编译器的不同行为时,我感到困惑。让我解释一下: 我得到一个例外: If(userLoginModel.UserId>0) { //do something } else{ //do something } 异常:{“对象引用未设置为对象的实例。”} 是的,它是空的; 但如果你写: if (userLoginReturnModel != null && userLoginReturnModel.UserId >0) { //d

大家好,今天我正在制作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时,这也需要引发异常,因为对象为null。正如我们所知道的,这两种情况都将被检入。任何有充分解释的答案。

如果:

if (userLoginReturnModel != null && userLoginReturnModel.UserId >0)
如果第一个条件为false,则不检查next(因为不需要这样做-false&&anything给出false)


与| |相似-如果第一个为真,则不检查下一个(无需-true | | |任何内容都为真)。

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

if(false&&…


false之后是否需要检查条件?false&&true仍然为false。因此,其余条件不重要,也不会被检查。

如果我要求您从书架检索我的书,但我没有书架,这是一个问题-对吗?空值也是一样。如果您尝试访问
userLoginReturnModel的实例
但是你没有一个-这是一个问题。
&
使if语句短路,因此它不会执行下半部分。请再次阅读问题@John。谢谢。第一个注释不匹配。@John问题实际上是为什么在第二个示例中只检查第一个条件。@John,问题是关于
&&
以及它如何避免出现
NullReferenceException
,而不是如何修复一个异常,因此不可能重复该问题可能作为附录:当仅用一个“&”表示布尔限制时,会出现预期。检查: