这句话可以评估为FALSE吗?

Boj*_*anG 2 c#

我在做评论的时候偶然发现了这个,而且作者不在:

int n = Convert.ToInt32(text);
if (((n > 0) || (n < 0)) || (n == 0))
{
  return 1;
}
Run Code Online (Sandbox Code Playgroud)

一般来说代码看起来很稳固,我很难相信这个片段的唯一目的是让审阅者感到困惑,但我没有看到这种情况失败的方法.我错过了什么吗?

Kev*_*son 9

这可能是可空类型的残余.请参阅msdn以获取解释,但基本上如果您的代码最初是这样的:

int? n = StringToInt(text);    // People roll their own functions to do this, though
                               // they really shouldn't
if (((n > 0) || (n < 0)) || (n == 0))
{
  return 1;
}
Run Code Online (Sandbox Code Playgroud)

然后这可能会失败.上面的每个语句都是false,因为n可以null来自函数,假设它在错误的输入上返回null,并且代码支持可空类型.

不太可能,但在查看"维护代码"时,任何事情都是可能的.但是如上所述,它必须返回1(或抛出异常,正如此线程中其他人所提到的那样).

  • @Danny - 可以在2.0中使用可空类型 (2认同)

GMa*_*ckG 5

它会永远返回true,假设它到达那里.

考虑:

bool x = (n > 0) || (n < 0);
bool y = (n == 0);

if (x || y)
{
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

如果n不为零则则为n > 0或者n < 0为真,所以x是真的并且y是假的.

如果n为零,n == 0则为true,因此x为false且y为true.

无论哪种方式,OR的一侧都是真的.