2016-03-20 177 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循环中的项目。 –