if()语句行为,为什么这会传入循环?

Sha*_*e.C 1 c# parameters if-statement

我遇到了一个简单的循环,它似乎进入循环而不管我查询的参数,以确定循环是否应该处理.下面是循环;

  if (result[4] == 0x01 || result[5] == 0x01 || result[6] == 0x01 || result[7] == 0x01 || result[8] == 0x01 || result[9] == 0x01 & deviceState == false)
                {

                        deviceState = true;
                        mainUI.setAlarmColour(result, device);

                }
Run Code Online (Sandbox Code Playgroud)

注意:我已经尝试了"&"和"&&"作为最终参数,但两者都没有区别.

使用此循环,即使deviceState设置为true,它也会继续进入循环.但是,如果我使用以下循环它会停止此问题:

  if (result[4] == 0x01 || result[5] == 0x01 || result[6] == 0x01 || result[7] == 0x01 || result[8] == 0x01 || result[9] == 0x01)
                {
                    if (deviceState == false)
                    {
                        deviceState = true;
                        mainUI.setAlarmColour(result, device);
                    }
                }
Run Code Online (Sandbox Code Playgroud)

第二个循环解决了问题,它不再进入循环,这意味着我的函数没有被调用.

我错过了一些基本的东西吗?我已经尝试过messageBoxes来验证它是错误的并且它们以我期望的方式返回,但它仍然进入第一个循环.

Rud*_*ser 7

首先,它&&就像你已经尝试过(&是一个按位运算符),但是你应该将你OR的组合在一起并拥有最终的AND独立,如下所示:

if (
    (result[4] == 0x01 || result[5] == 0x01 || result[6] == 0x01 ||
     result[7] == 0x01 || result[8] == 0x01 || result[9] == 0x01)
   && deviceState == false)
{
    deviceState = true;
    mainUI.setAlarmColour(result, device);
}
Run Code Online (Sandbox Code Playgroud)

请注意,您也deviceState == false可以简单地更改为!deviceState(如果它不可为空bool).!为了比较,将false翻译为true,所以你基本上说的是完全相同的东西,虽然更短.

(请忽略丑陋的格式,只是想让它更清晰)

  • +1我也会将`result [i] == 0x01`链分解成一个方法来给出类似`if(!deviceState && ResultContainsValid(result))`的东西,大的if语句说任何东西都不应该重构为方法说些什么. (4认同)
  • 我还会在if语句的开头放置`deviceState == false`,因为没有点测试数组索引只能找出deviceState为真. (2认同)