我在做评论的时候偶然发现了这个,而且作者不在:
int n = Convert.ToInt32(text);
if (((n > 0) || (n < 0)) || (n == 0))
{
return 1;
}
Run Code Online (Sandbox Code Playgroud)
一般来说代码看起来很稳固,我很难相信这个片段的唯一目的是让审阅者感到困惑,但我没有看到这种情况失败的方法.我错过了什么吗?
这可能是可空类型的残余.请参阅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(或抛出异常,正如此线程中其他人所提到的那样).
它会永远返回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的一侧都是真的.