0

解決済み: コードは 10 ミリ秒ごとにイベントを介して実行され、イベント間の時間が長くなり、問題が解決されました。

IndexOutOfRangeException起こってはならない奇妙な現象が発生しています。ステートメント自体が「false」であるにもかかわらず、if ステートメント内のコードが使用されています。これは既知の問題ですか? もしそうなら、どうすればこれを修正できますか?

エラーは、カウンター (an int) が 0の場合に発生し、ライトelement -1から要求されます。array

コード:

 if (counter  > 0)
    {
    Console.WriteLine("counter-1 is groter dan 0");
    int i = counter - 1;
    Lights[i].setState(0);
    }
4

5 に答える 5

1

それが、他のコードが変更されていないシングル スレッド アプリケーションである場合counter、最も可能性の高い説明は、Lights単に十分な長さではないということです。たとえば、counteris 1(つまり、同意していただけると思います> 0- したがって、ifテストはパスします) であり、Lightsが長さゼロの配列である場合、Lights[i]( Lights[0]) はこの例外を発生させます - またはcounteris 200but Lights.Lengthis 199(またはそれ以下) の場合 - Lights[i]( ) は-のLights[199]範囲外です。0198

確認してくださいLights.Length

于 2013-05-21T09:25:14.020 に答える
1

カウンタがマルチスレッドでアクセス/操作されない限り、これは不可能な状態です。

いつでも課題を作成して 1 か所で確認できます。

 var index = 0;

 if ((index = (counter - 1))  > 0)
 {
    Lights[index].setState(0);
 }
于 2013-05-21T08:50:51.287 に答える