1

在审查代码时,我遇到了一些在评估中if使用!后跟 an的语句!=,例如

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;
}

谢谢

4

1 回答 1

5

这两个不同的。第一个说“这些都不相等”,第二个说“这些都相等”。

如果您将!运算符应用于它们,则必须将其更改||&&

if ((fs.ReadByte() == (byte)'D' &&
     fs.ReadByte() == (byte)'I' &&
     fs.ReadByte() == (byte)'C' &&
     fs.ReadByte() == (byte)'M'))
{
    Console.WriteLine("Not a DCM");
    return;
}
于 2012-08-25T23:08:50.597 回答