***问一个关于用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);
}
}
}
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);
}
}
}
问题好象在这里吧
错误原因就是说我的集合对象改变了。但是我每次反调用自己方法的时候都是一个新的集合对象,怎么还会这样呢?
另外,根本不需要用递归方法来做...
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();
}
}
}