是否嵌套if语句

Ria*_*ney 6 c# if-statement

我希望以前没有问过这个问题.

我有一个名为boolIsAllowed的可空布尔值和一个if条件,如下所示:

if(boolIsAllowed.HasValue && boolIsAllowed.Value)
{
 //do something
}
Run Code Online (Sandbox Code Playgroud)

我的问题是这个好的代码还是我会更好地将它分成嵌套的if语句?如果boolIsAllowed.HasValue等于false然后抛出异常,是否会检查第二个条件?

我希望这个问题不是太愚蠢.

提前致谢.

Jon*_*eet 18

它很好.如果为false,则不会检查第二个条件HasValue,因此不会抛出异常.就像这样的事情:

string name = ...;
if (name != null && name.Length > 5)
Run Code Online (Sandbox Code Playgroud)

再一次,没关系 - 如果name为null,你将不会得到NullReferenceException ,因为&&是短路的.

同样地,|| 运算符是短路的,但是反过来 - 如果左手操作数为,则整个表达式的计算结果为true而不检查右手操作数.例如:

// Treat null as if it were an empty string
if (name == null || name.Length == 0)
Run Code Online (Sandbox Code Playgroud)

编辑:如评论中所述,这仅适用于&&和|| -它并不适用于&和|,这始终评估两个操作数.

  • 亵渎!*SCNR* (2认同)
  • 顺便说一句,如果您要使用运算符而不是&&,则将评估条件的两个方面,并且null ref异常将导致hasvalue返回false的情况. (2认同)

sim*_*sjo 8

您可以检查真值,即使它为空:

bool? val = null;
if( val == true ) // Works
{
  //do something
}
Run Code Online (Sandbox Code Playgroud)


Phi*_*ert 6

关于什么:

if (boolIsAllowed ?? false)
{
}
Run Code Online (Sandbox Code Playgroud)