***问一个关于用IEnumerator 实现递归算法的问题?下面这段递归算法老是出错,请高手指点一下。
private void RecursionDeleteArrayList(ArrayList ar, int count)
{
    IEnumerator ie = ar.GetEnumerator();
    while (ie.MoveNext())
    {
       bool hasContain = Convert.ToString(ie.Current).Contains("COMMON");
       if (hasContain == true)
       {
           ar.Remove(ie.Current);
           RecursionDeleteArrayList(ar, count);
       }
    }  
}

解决方案 »

  1.   

      ar.Remove(ie.Current); 
    问题好象在这里吧
      

  2.   

    不是这里是ie.MoveNext()移到下一个元素时出错了。是在方法出堆栈时出错了。
    错误原因就是说我的集合对象改变了。但是我每次反调用自己方法的时候都是一个新的集合对象,怎么还会这样呢?
      

  3.   

    当然出错,按照你的递归方法来做的话,要在if结束前加个return
    另外,根本不需要用递归方法来做...
      

  4.   

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Text;namespace ConsoleApplication45
    {
        class A
        {
            public void RecursionDeleteArrayList(IList ar, int count)
            {
                IEnumerator ie = ar.GetEnumerator();
                for (int i = 0; i < count; i++)
                    ie.MoveNext();
                if (ie.MoveNext())
                {
                    bool hasContain = Convert.ToString(ie.Current).Contains("COMMON ");
                    if (hasContain == true)
                        ar.Remove(ie.Current);
                    else
                        count++;
                    RecursionDeleteArrayList(ar, count);
                }
                return;
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                ArrayList abc = new ArrayList();
                abc.Add("A COMMON ");
                abc.Add("B");
                abc.Add(5);
                abc.Add("COMMON A");
                new A().RecursionDeleteArrayList(abc, 0);
                Console.Read();
            }
        }
    }