2016-03-20 2 views
0

У IEnumerator C# нет следующих() и remove(), как я могу это решить? (hitScans является ArrayList)Итератор и 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 не имеет следующих() и remove(); насколько я знаю, он не имеет подобных методов. Итак, что мне нужно сделать, чтобы мой код работал? – Jacklyn

ответ

1

ли вы действительно нужно использовать итератора/Enumerator ??

Если вам просто нужно удалить элементы из ArrayList в то время как итерация его (обычно ведьмы обсуждаемый вопроса), я хотел бы предложить что-то вроде этого:

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

и для второй части: Еогеаспа - не это решение?

+0

Это может сработать, знаете ли вы что-то для замены next()? – Jacklyn

+0

yep. Отредактированный ответ. foreach мог бы помочь, я думаю – MisterMe

+0

Вы забыли поставить в версию foreach? – Jacklyn

0

Что касается «remove», то нет прямого эквивалента .NET, поскольку IEnumerable не предназначен для модификации. Есть некоторые обходные: Want to remove an item from a IEnumerable<T> collection

Что касается «Далее», обратите внимание, что даже если каждый из «hasNext» и «ряд» не эквивалентен 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; 
} 
+0

Спасибо, но мне кажется, что я должен использовать цикл for, поскольку MisterMe сказал – Jacklyn

+0

@Jacklyn: Да - я не думаю, что вы можете удалить в стандартном контуре MoveNext/Current. –

Смежные вопросы