C#的IEnumerator没有next()和remove(),如何解决这个问题?(hitScans是一个ArrayList)
// 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();发布于 2016-03-20 18:08:36
你真的需要使用Iterator/枚举器吗?
如果您只需要在迭代时从ArrayList中删除元素(通常会讨论这个问题),我建议如下所示:
for (int i=hitScans.Count-1;i>=0;i--){
if (/*your difficult condition*/){
hitScans.RemoveAt(i);
}
}至于第二部分,这不是解决办法吗?
发布于 2016-03-20 18:41:25
关于“删除”,没有直接的.NET等效,因为IEnumerable是不可修改的。这里有一些工作: collection。
关于“下一步”,请注意,尽管“hasNext”和“next”的每一个都不等同于C# 'MoveNext‘和“Current”,但当同时使用时,它们产生的效果也是相同的。
例如,
Iterator it = enemyWaves.iterator();
while (it.hasNext()) {
Object o = it.next();
}通常将转换为以下C#代码:
IEnumerator it = enemyWaves.GetEnumerator();
while (it.MoveNext())
{
object o = it.Current;
}https://stackoverflow.com/questions/36117416
复制相似问题