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

C# if()语句的行为,为什么会传入循环?,c#,if-statement,parameters,C#,If Statement,Parameters,我遇到了一个简单的循环,它似乎进入了循环,而不管我为了确定循环是否应该处理而查询的参数是什么。下面是循环 if (result[4] == 0x01 || result[5] == 0x01 || result[6] == 0x01 || result[7] == 0x01 || result[8] == 0x01 || result[9] == 0x01 & deviceState == false) {

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

  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);

                }
注意:我尝试了“&”和“&&”作为最后的参数,但两者都没有区别

使用此循环,即使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);
                    }
                }
第二个循环解决了这个问题,它不再进入循环,这意味着我的函数没有被调用


我是不是错过了一些基本的东西?我尝试了MessageBox来验证它是否为false,它们返回的方式与我预期的相同,但它仍然进入第一个循环

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

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);
}
请注意,您还可以将
deviceState==false
更改为简单的
!deviceState
(如果它是不可为空的
bool
)<代码>将false翻转为true进行比较,因此您实际上说的是完全相同的事情,尽管更短


(请忽略难看的格式,只是尝试更清楚地显示)

首先,它是
&
,就像您已经尝试过的(
&
是位运算符),但是您应该将
分组在一起,并将最后的
单独显示,如下所示:

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);
}
请注意,您还可以将
deviceState==false
更改为简单的
!deviceState
(如果它是不可为空的
bool
)<代码>将false翻转为true进行比较,因此您实际上说的是完全相同的事情,尽管更短


(请忽略难看的格式,只是尝试更清楚地显示)

&&的优先级高于| |循环在哪里?这是一个if-else语句。我的错,循环在代码段之外…我猜这使我的问题标题变了,我将更改它。&&的优先级高于| |循环在哪里?这是一个if-else语句。我的错,循环在代码片段之外…我猜这使我的问题标题变了,我将改变它。+1我还将把
result[i]==0x01
链分解成一个方法,给出类似
if(!deviceState&&resultcontainsinsvalid(result))
,大if语句什么也不说,应该被重构成能说点什么的方法。我现在明白了:)我猜这是那种“只有你知道它,你才会知道它”之类的东西。干杯@Shane'Shamus'Coulter括号
(…)
在这里很重要,因为
A | | B和&C
的意思是
A | | |(B和&C)
,而不是你想要的
(A | B)和&C
。顺便问一下,
result
是数组吗?我想用较短的方式编写
0x01
的所有检查。@JeppeStigNielsen是的,结果是一个数组。我也会在if语句的开头加上
deviceState==false
,因为测试数组索引没有意义,只能找出deviceState是true。+1我还会将
结果[I]分解出来==0x01
链接到一个方法中,以给出类似于
if(!deviceState&&ResultContainsValid(result))
的内容,不说话的大if语句应该重构为说话的方法。我现在明白了:)我猜这是那种“只有知道才能知道”之类的东西。干杯@Shane'Shamus'Coulter括号
(…)
在这里很重要,因为
A | | B和&C
的意思是
A | | |(B和&C)
,而不是你想要的
(A | B)和&C
。顺便问一下,
result
是数组吗?我想用较短的方式编写
0x01
的所有检查。@JeppeStigNielsen是的,结果是一个数组。我还将在if语句的开头放置
deviceState==false
,因为测试数组索引时没有必要只找出deviceState为true。