首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Iterator与IEnumerator

Iterator与IEnumerator
EN

Stack Overflow用户
提问于 2016-03-20 17:58:38
回答 2查看 153关注 0票数 0

C#的IEnumerator没有next()和remove(),如何解决这个问题?(hitScans是一个ArrayList)

代码语言:javascript
复制
// 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;
                }

代码语言:javascript
复制
// Iterator i = hitScans.iterator();
   IEnumerator i = hitScans.GetEnumerator();
                while (i.MoveNext())
                {
                    double[] scan = (double[])i.next();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-20 18:08:36

你真的需要使用Iterator/枚举器吗?

如果您只需要在迭代时从ArrayList中删除元素(通常会讨论这个问题),我建议如下所示:

代码语言:javascript
复制
for (int i=hitScans.Count-1;i>=0;i--){
   if (/*your difficult condition*/){
      hitScans.RemoveAt(i);   
   }
}

至于第二部分,这不是解决办法吗?

票数 1
EN

Stack Overflow用户

发布于 2016-03-20 18:41:25

关于“删除”,没有直接的.NET等效,因为IEnumerable是不可修改的。这里有一些工作: collection

关于“下一步”,请注意,尽管“hasNext”和“next”的每一个都不等同于C# 'MoveNext‘和“Current”,但当同时使用时,它们产生的效果也是相同的。

例如,

代码语言:javascript
复制
Iterator it = enemyWaves.iterator();
while (it.hasNext()) {
    Object o = it.next();
}

通常将转换为以下C#代码:

代码语言:javascript
复制
IEnumerator it = enemyWaves.GetEnumerator();    
while (it.MoveNext())
{
    object o = it.Current;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36117416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档