C# if(a==b)与if(!(a!=b))之间的差异

C# if(a==b)与if(!(a!=b))之间的差异,c#,performance,C#,Performance,我在我们的项目中遇到了一些代码片段。 老家伙换了 if(!this.printHelper.PrepareDoc(printerName, report, this.PageBox != null)){ return; } 与 用于性能改进。 这两种情况之间的实际区别是什么 这两种说法完全不同 this.PageBox!=null计算为布尔值,在参数列表中翻转该值,并在相反的返回值上进行调整 如果函数返回值是传入的第三个参数的值,或者是它的一个否定值,那么他们可能会侥幸逃脱。这两个语句

我在我们的项目中遇到了一些代码片段。 老家伙换了

if(!this.printHelper.PrepareDoc(printerName, report, this.PageBox != null)){
    return;
}

用于性能改进。
这两种情况之间的实际区别是什么

这两种说法完全不同

this.PageBox!=null
计算为
布尔值
,在参数列表中翻转该值,并在相反的返回值上进行调整


如果函数返回值是传入的第三个参数的值,或者是它的一个否定值,那么他们可能会侥幸逃脱。

这两个语句在逻辑上完全不同

当您将函数调用PrepareDoc返回的布尔值反转为“logical NOT”时,if block的第一条语句仅在false时执行,第二条语句仅在true时执行

此外,第一条语句上的最后一个参数是反向/翻转的,因此传递给函数调用PrepareDoc的值是逻辑逆


唯一的性能差异将是在第一条语句和参数上翻转函数的返回值的操作。

如果没有看到
PrepareDoc
,我们如何判断呢?我没有看到性能的改进,但我确实看到了更多的可读性。性能改进可能在
.PrepareDoc
中,因为它将第三个参数更改为PrepareDoc(),所以您的代码与“a==b”vs“!(a!=b)”有很大不同。除非PrepareDoc也被更改。。。在这种情况下,这个问题需要更换。“老家伙需要更换”是一个非常投机的问题。我们不知道PrepareDoc受什么影响。可能新家伙需要更换:D@Ped7g字体是的,他们只是不像以前那样做了。我们不要冒险,换掉所有的人。
if(this.printHelper.PrepareDoc(printerName, report, this.PageBox == null)){
    return;
}