双重否定 IF 语句

Nat*_*ate 1 double conditional if-statement

在审查代码时,我在评估中遇到了一些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;
}
Run Code Online (Sandbox Code Playgroud)

是否有任何理由使用双重否定来评估正面,例如

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

谢谢

Dav*_*son 5

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

如果您!在它们之间应用了运算符,则必须将 更改||&&

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