我想把一个ArrayList里面的每一项先打印出来,再删除该项,用
for(int i=0; i<MyArrayList.Count; ++i)
{
    MessageBox.Show(MyArrayList[i].ToString());
    MyArrayList.RemoveAt(i);
}
这样不行,大家有什么办法吗?

解决方案 »

  1.   

    for(int i=0; i<MyArrayList.Count; ++i)
    {
        MessageBox.Show(MyArrayList[i].ToString());
    }
    MyArrayList.Clear();
      

  2.   

    foreach (object obj in MyArrayList)
    {
    MessageBox.Show(obj.ToString());
    MyArrayList.Remove(obj);
    }
      

  3.   

    //这样
    while (MyArrayList.Count > 0)
    {
        MessageBox.Show(MyArrayList[0].ToString());
        MyArrayList.RemoveAt(0);
    }
      

  4.   

    ArrayList list = new ArrayList();
                while (list.Count != 0)
                {
                    Console.WriteLine(list[0].ToString());
                    list.RemoveAt(0);
                }
      

  5.   

    to  flyaqiao   foreach (object obj in MyArrayList)
    {
    MessageBox.Show(obj.ToString());
    MyArrayList.Remove(obj);
    }
    这样业不行
      
     
      

  6.   

    for(int i=0; i<MyArrayList.Count; ++i)
    {
    MessageBox.Show(MyArrayList[i].ToString());
    MyArrayList.RemoveAt(i);
    }
    Remove后Count会变
    用While循环
      

  7.   

    while我试试,理论上应该可以,谢谢大家
      

  8.   

    可以这样:            for (int i = 0; i < ar.Count; ++i)
                {
                    MessageBox.Show(ar[0].ToString());
                    ar.RemoveAt(0);
                    i = i - 1;
                }
      

  9.   

     回复人:abblly(西边日出东边雨) ( 二级(初级)) 信誉:100  2007-03-01 10:56:31  得分:0

    to flyaqiaoforeach (object obj in MyArrayList)
    {
    MessageBox.Show(obj.ToString());
    MyArrayList.Remove(obj);
    }
    这样业不行============================
    这个答案是纯粹误导楼主foreach循环是只读循环,目的是为了达到更快的访问速度,所以在foreach内不能修改直接对象数组.
      

  10.   

    int arrlen=ar.Count;
    for(int i=0;i<arrlen;i++)
    {
       MessageBox.Show(ar[0].toString());
       ar.RemoveAt(0);
    }
      

  11.   

    to: sunrobust(咸鱼) 
      你解释foreach 循环,解释的很好,给我重新一个认识.开始我也想到了foreach,但是确实不行.
      

  12.   

    while( arraylist.count > 0 )
    {
        MessageBox.Show(arraylist[0].toString());
        arraylist.RemoveAt(0);
    }
      

  13.   

    while( arraylist.count > 0 )
    {
    MessageBox.Show(arraylist[0].toString());
    arraylist.RemoveAt(0);
    }
      

  14.   

    for(int i=MyArrayList.Count-1; i>0; --i)
    {
        MessageBox.Show(MyArrayList[i].ToString());
        MyArrayList.RemoveAt(i);
    }
      

  15.   

    不能使用foreach 这个是只读 获取.可用for 或者 while , do while
      

  16.   

    Arraylist clone=new ArrayList(MyArrayList)
    for(int i=0; i<clone.Count; ++i)
    {
        MessageBox.Show(clone[i].ToString());
        MyArrayList.RemoveAt(i);
    }  
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 最新版本:20070212http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  17.   

    Arraylist clone=new ArrayList(MyArrayList)
    for(int i=0; i<clone.Count; ++i)
    {
        MessageBox.Show(clone[i].ToString());
        MyArrayList.RemoveAt(i);
    }
    ----------
    这个行吗?到后来MyArrayList.RemoveAt(i);是不是会出错啊,因为这个时候MyArrayList里面的元素的个数很可能已经小于i了
      

  18.   

    从后边往前删,这样for(int i=MyArrayList.Count-1; i>0; i--)
    {
        MessageBox.Show(MyArrayList[i].ToString());
        MyArrayList.RemoveAt(i);
    }
      

  19.   

    for(int i=MyArrayList.Count; i>0; i--)
    {
        MessageBox.Show(MyArrayList[i].ToString());
        MyArrayList.RemoveAt(i);
    }
      

  20.   

    觉得用while比较方便,和3楼一样
      

  21.   

    ArrayList clone = new ArrayList(MyArrayList);
                for(int i=0; i<clone.Count; ++i)
                {
                    MessageBox.Show(clone[i].ToString());
                    MyArrayList.RemoveAt(0);
                }
      

  22.   

    改正一下,上边的循环少了一个元素
    for(int i=MyArrayList.Count-1; i>=0; i--)
    {
        MessageBox.Show(MyArrayList[i].ToString());
        MyArrayList.RemoveAt(i);
    }
      

  23.   

    liujia_0421(SnowLover) ( )的方法是可行的.
      

  24.   

    访问Count属性后可以先保存下来每次执行RemoveAt方法后 它的Count就会减少
      

  25.   

    for (int i = 0; i < ar.Count; i++)
    {
    object o=ar[i];
    if(del)//o满足一定条件
    {
    MessageBox.Show(o.ToString());
    ar.Remove(o);
    i = i--;
    }
    }
    //我想这样才是这个问题的真正意义
      

  26.   

    i = i--; 这句 明显喝多了 →i--;
      

  27.   

    i = i--; 这句 明显喝多了 →i--;
    ----------
    是喝多了,呵呵
      

  28.   

    for (int i = 0; i < ar.Count; i++)
    {
    object o=ar[i];
    if(del)//o满足一定条件
    {
    MessageBox.Show(o.ToString());
    ar.Remove(o);
    i = i--;
    }
    }
    -----------
    那句判断是在很多情况下用到的,你这中解法类似C++中vector的满足条件的删除
      

  29.   

    for(int i=0; i<MyArrayList.Count; ++i)
    {
        MessageBox.Show(MyArrayList[i].ToString());
    }
    MyArrayList.Clear();
     ok
      

  30.   

    有够汗……if ( arraylist.Count > 0 )
    {
      MessageBox.Show( arraylist[0] );
      arraylist.RemoveAt( 0 );
    }
      

  31.   

    while ( arraylist.Count > 0 )
    {
      MessageBox.Show( arraylist[0] );
      arraylist.RemoveAt( 0 );
    }
      

  32.   

    因为remove以后长度会变,所以不好用for循环~~
      

  33.   

    for(int i=0; i<MyArrayList.Count; ++i)
    {
        MessageBox.Show(MyArrayList[i].ToString());
    }
    MyArrayList.Clear();
     ok
    ---------------
    这个不满足需要,有可能我在for循环里面判断条件就break了,而break之前的删除了MyArrayList中的一些,没有完全删除完毕,剩下的要保留起来,不能clear
      

  34.   

    用while循环,判断列表是否为空,不为空,打印第一条记录,然后删除,这种方法上面已有很多人给出来了,这样不行吗?
      

  35.   

    while (MyArrayList.Count > 0)
    {
        MessageBox.Show(MyArrayList[0].ToString());
        MyArrayList.RemoveAt(0);
    }