2016-03-20 12 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

「削除」に関しては、IEnumerableは変更可能ではないため、直接の.NET同等物はありません。いくつかの回避策があります。一緒に使用する場合、「次へ」について Want to remove an item from a IEnumerable<T> collection

は、「MoveNextメソッド」さえ「のhasNext」とのそれぞれかかわらず「次は、」C#に等価ではないことに注意してくださいと「現在」、彼らは生産同じ効果。

例えば、

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

通常、次のC#コードに変換されます:あなたは*何*解決するにはどうすればよい

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

ありがとうございます、しかし、私はMisterMeとしてforループを使わなければならないようです。 – Jacklyn

+0

@Jacklyn:はい - 私はあなたが標準のMoveNext/Currentループの項目。 –

関連する問題