2016-03-19 15 views
-3

私はダニ機能を有するタイマーを有する:なぜリスト "<T>.Insert(index、T)"がインデックスの代わりにリストの最後に追加されますか?

void CollisionTimer_Tick(object sender, EventArgs e) 
    { 
     int j; 
     angle += 10; 
     angle %= 360; 

     int i = angle/10 - 1; 
     if (i < 0) 
      j = 0; 
     else 
      j =i % 35; 

     ObstaclePoints.Insert(j, getPoint(angle)); 
    } 

所望の効果が点リストである「ObstaclePoints」0-35の間のj個の反復として36ポイントを取得します。

最初の36回のティック後に問題が発生し、jが0に戻っても、リストは追加され続け、私のリストには36以上のポイントがあります。 (すなわち、別の36ティックの後、最初の36が上書きされる代わりに、私のリストに72ポイントが得られる)。

なぜこれが起こり、どうすればこの問題を解決できますか?

+0

これは何語ですか?それは[tag:C++]のように見えますが、そのタグは表示されません。 –

+1

どちらもCではありませんでした。 –

+0

@iharob - C#です。タグはそこにあります。 – martinstoeckli

答えて

3

List.Insert指定したインデックスの項目を上書きしませんが、この位置に1つ挿入します。次のコードに示すようにアドレスに代わりにそれを配列ObstaclePoints[35]を使用します。

ObstaclePoints[j] = getPoint(angle); 
+3

これはリストでも動作します。配列ではありません。 – Clemens

+1

@Clemensまた、アイテムにアクセスする前にリストにアイテムを追加することを忘れないでください。 – Kyle

+0

@Clemens OKですが、リストのCountが一定であれば、配列が好きです。リストを使用して、カイルが言及したように、アイテムにアクセスする前に項目を追加する必要があります。 – KnorxThieus

関連する問題