我使用OldCheckListBox.Items.Remove(OldCheckListBox.CheckedItems[i]);函数只能把值去掉,然后又出现异常了,说索引超出了数组界限,怎么解决这个问题,public static void GetListFromCheckListBoxToAnother(CheckedListBox OldCheckListBox, CheckedListBox TargetCheckListBox)
        {
            
            for (int i = 0; i < OldCheckListBox.CheckedItems.Count; i++)
            {
                bool CheckItem = false;
                for (int j = 0; j < TargetCheckListBox.Items.Count; j++)
                {
                    if (OldCheckListBox.CheckedItems[i].ToString()==TargetCheckListBox.Items[j].ToString())
                    {
                        CheckItem = true;
                        break;
                    }
                }
                if (CheckItem == true)
                {                }
                else
                {
                    OldCheckListBox.Items.Remove(OldCheckListBox.CheckedItems[i]);
                    
                    TargetCheckListBox.Items.Add(OldCheckListBox.CheckedItems[i].ToString());
                }
            }
        }c#

解决方案 »

  1.   

    集合循环Remove,一定要倒过来循环,否则就会出索引超出范围错误  for (int i = OldCheckListBox.CheckedItems.Count-1; i >=0; i--)
      

  2.   

    倒得循环就没问题了吗?这符合逻辑吧?是不是有关remove方法大部分都要用倒着循环啊
      

  3.   

    因为你remove一次,OldCheckListBox.CheckedItems.Count实际会减少一次,而你i往后增加,会导致超出OldCheckListBox.CheckedItems.Count值举个例子,刚开始OldCheckListBox.CheckedItems.Count=3,相当于
    for(int i=0;i<3;i++)
       OldCheckListBox.CheckedItems.Remove(i); //你想想,到i=2时,这句是不是要报错?而倒过来循环就不会了