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)
谢谢
那两个是不同的。第一个说“这些都不相等”,第二个说“这些中的任何一个都相等”。
如果您!在它们之间应用了运算符,则必须将 更改||为&&:
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)