解决:代码每10毫秒通过事件进行一次,从而增加了事件解决问题所需的时间。
我遇到了一个不应该发生的奇怪的IndexOutOfRangeException
。即使语句本身是'false',也会使用if语句中的代码。这是一个已知的问题吗?如果是这样,我该如何解决这个问题?
当计数器(int
)为0时发生错误,因此从element -1
灯请求array
。
代码:
if (counter > 0)
{
Console.WriteLine("counter-1 is groter dan 0");
int i = counter - 1;
Lights[i].setState(0);
}
答案 0 :(得分:1)
除非以多线程方式访问/操作计数器 - 否则这应该是一个不可能的状态。
你可以随时尝试完成作业和在一个地方办理入住手续:
var index = 0;
if ((index = (counter - 1)) > 0)
{
Lights[index].setState(0);
}
答案 1 :(得分:1)
如果这是一个单线程应用程序而没有任何其他代码变异counter
,那么最可能的解释是Lights
根本不够长。例如,如果counter
为1
(我认为您同意,> 0
- 那么if
测试将通过),Lights
是一个零长度数组,然后Lights[i]
(Lights[0]
)会引发此异常 - 或counter
为200
但Lights.Length
为199
(或更少) - 由于Lights[i]
(Lights[199]
)超出了范围0
- 198
。
检查Lights.Length
。
答案 2 :(得分:0)
如果后台没有其他线程更改counter
,那么唯一可能的解释是Lights[]
集合的大小为零。
在访问其元素之前,请尝试检查Lights
的长度。
答案 3 :(得分:0)
试试这个
int i=0;
if (counter > 0)
{
Console.WriteLine("counter-1 is groter dan 0");
i = counter - 1;
Lights[i].setState(0);
}
答案 4 :(得分:0)
计时器每10ms触发一次事件。这创造了以下的可能性:
通过减少事件发生频率来解决问题。