双负IF语句

时间:2012-08-25 23:06:25

标签: if-statement double conditional

在审核代码时,我在评估中使用if后跟!来找到一些!=个帖子,例如。

if (!(fs.ReadByte() != (byte)'D' ||
      fs.ReadByte() != (byte)'I' ||
      fs.ReadByte() != (byte)'C' ||
      fs.ReadByte() != (byte)'M'))
{
    Console.WriteLine("Not a DCM");
    return;
}

是否有任何理由使用双重否定而不是评估积极因素,例如

if ((fs.ReadByte() == (byte)'D' ||
     fs.ReadByte() == (byte)'I' ||
     fs.ReadByte() == (byte)'C' ||
     fs.ReadByte() == (byte)'M'))
{
    Console.WriteLine("Not a DCM");
    return;
}

由于

1 个答案:

答案 0 :(得分:4)

这两个 不同。第一个说“这些都不相等”,第二个说“其中任何一个都是平等的”。

如果您在其中应用!运算符,则必须将||更改为&&

if ((fs.ReadByte() == (byte)'D' &&
     fs.ReadByte() == (byte)'I' &&
     fs.ReadByte() == (byte)'C' &&
     fs.ReadByte() == (byte)'M'))
{
    Console.WriteLine("Not a DCM");
    return;
}