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。