2016-03-20 219 views
0

C#的IEnumerator沒有next()和remove()我該如何解決這個問題? (hitScans是一個ArrayList)Iterator和IEnumerator

// Iterator it = enemyWaves.iterator(); 
    IEnumerator it = hitScans.GetEnumerator(); 
     while (it.MoveNext()) 
      { 
       if ((dist = ((ew = (EnemyWave)it.next()).distanceTraveled += ew.bulletVelocity) 
       - myLocation.distance(ew.fireLocation)) > 50) 
       { 
        it.remove(); 
        continue; 
       } 

// Iterator i = hitScans.iterator(); 
    IEnumerator i = hitScans.GetEnumerator(); 
       while (i.MoveNext()) 
       { 
        double[] scan = (double[])i.next(); 
+1

你怎麼解決* *是什麼? –

+0

@PrestonGuillot IEnumerator沒有next()和remove();據我所知它沒有任何類似的方法。那麼我該如何做我的代碼工作? – Jacklyn

回答

1

你真的需要使用迭代器/枚舉?

如果你只需要在迭代它(whitch通常討論的問題),從ArrayList中刪除元素,我建議是這樣的:

for (int i=hitScans.Count-1;i>=0;i--){ 
    if (/*your difficult condition*/){ 
     hitScans.RemoveAt(i); 
    } 
} 

和第二部分: 的foreach - 是不是解決方案?

+0

這可能會起作用,你知道有什麼東西可以替代next()嗎? – Jacklyn

+0

是的。編輯答案。 foreach可以幫助我認爲 – MisterMe

+0

你忘了放入foreach版本嗎? – Jacklyn

0

關於'刪除',沒有直接的.NET等價物,因爲IEnumerable並不是可修改的。有一些變通辦法: Want to remove an item from a IEnumerable<T> collection

關於「下一步」,請注意,即使每個「hasNext」和「下一個」並不等同於C#「的MoveNext」和「現在」,一起使用時,它們所產生的同樣的效果。

例如,

Iterator it = enemyWaves.iterator(); 
while (it.hasNext()) { 
    Object o = it.next(); 
} 

一般會轉化成下面的C#代碼:

IEnumerator it = enemyWaves.GetEnumerator();  
while (it.MoveNext()) 
{ 
    object o = it.Current; 
} 
+0

謝謝,但似乎我必須使用for循環,因爲MisterMe說 – Jacklyn

+0

@Jacklyn:是的 - 我不認爲你可以刪除標準MoveNext/Current循環中的項目。 –