在C#中,哪个“if”语句更快

本文关键字:语句 if 哪个 | 更新日期: 2023-09-27 18:00:30

在以下条件下,哪个if语句更快。看来短路会编译成比非短路更多的指令。

bool force = false;
bool _isLoadingActual = true;
bool _isLoadingLoadCore = true;
int a = 0, b = 0;
if (force | !(_isLoadingActual | _isLoadingLoadCore))
{
    a = 1;
}
if (force || !(_isLoadingActual || _isLoadingLoadCore))
{
    b = 1;
}

在C#中,哪个“if”语句更快

以下是最快的解决方案

a = 0;
b = 0;

因为您已经知道布尔变量的值。

不,真的。。第二个可能更快,因为它可能短路,也就是说,如果你没有将第一个布尔值硬编码为false!否则,短路似乎必须更快。

我认为第二个代码越快。

if (force || !(_isLoadingActual || _isLoadingLoadCore))
{
    b = 1;
}

因为这是短路评估。

在上面的代码中,如果force为真,则不需要检查休息条件(!(_isLoadingActual || _isLoadingLoadCore))。

假设您的问题是"|||中的哪一个短路":

  • ||短路-||操作员(C#参考)

    如果第一个操作数的计算结果为false,则第二个运算符确定OR表达式作为一个整体的计算结果是true还是false。

  • |不短路-|操作员(C#参考)

    对于布尔操作数,|计算其操作数的逻辑或;也就是说,当且仅当其两个操作数都为false时,结果为false。

所以在纯理论意义上,使用||的代码会更快,而且很可能您无法在实际代码中测量差异的影响。

请注意,如果操作数的计算有副作用,则两个语句是不等价的(不是您的情况,因为您已经有布尔变量了)。