for (int i = 0; i < this.listView1.SelectedItems.Count; i++)
                    {
                        this.listView1.Items.Remove(this.listView1.SelectedItems[i]);
                        i--;
                    }
麻烦大家解释一下为什么要I--后又I++

解决方案 »

  1.   

    Remove之后,SelectedItems.Count会自动减一。所以要i--,要不然会越界。
    貌似这个写法是我喜欢干的事情,你再哪里看的什么源码?
      

  2.   

    因为移除一项后,选中项的索引又重新生成了一次。被删除项后面的索引依次向前移了一位,即减了1.
    完全可以这样写
    for (int i = 0; i < this.listView1.SelectedItems.Count;)
    {
        this.listView1.Items.Remove(this.listView1.SelectedItems[i]);
    }

    for (int i = this.listView1.SelectedItems.Count - 1; i >= 0 ; i--)
    {
        this.listView1.Items.Remove(this.listView1.SelectedItems[i]);
    }
      

  3.   

    this.listView1.Items.Remove(this.listView1.SelectedItems[i]);
    应该是将 listView1 中被选中的项目从第一个开始删除  被删掉的是第一个元素,原来的第二个就变成了 第一个了 所以要--  
    这么写代码 有点可怕
      

  4.   

    其实这个写法很蠢,等同于下面的代码while(this.listView1.SelectedItems.Count >0)
      this.listView1.Items.Remove(this.listView1.SelectedItems[0]);
      

  5.   

    如果没有i--的话,删除一个后,下个Item会在刚删除的位置,然后i++就漏掉一个Item没有处理
      

  6.   

    我感觉是不是从后往前删更好啊
    for(int i = this.listView1.SelectedItems.Count ; i >=0 ; i --)
    {
    this.listView1.Items.Remove(this.listView1.SelectItems[i]);
    }
      

  7.   

    至于后面的i--,因为listview的序列在你没移除一个后序列会自动减1,所以你要减去这个1才能继续。
    有点听不懂是吧,举个例子
    一家人有4个儿子,先把老大赶出家门,然后家里就3个儿子了,自然而然老二成了老大,就是把老二+1变成了老大,然后再+1继续把老二(也就是现在的老大了)赶走,依次类推
      

  8.   

    我喜欢这么写,不过for里面会有个判断。不知道我还算不算地球人。
      

  9.   

    for (int i = 0; i < this.listView1.SelectedItems.Count; i++)
    {
    this.listView1.Items.Remove(this.listView1.SelectedItems[i]);
    i--;
    }
    第一眼看上去怪怪的这个代码要么不运行,要么只运行一次,要么S循环
      

  10.   

    个人喜欢for(int i = this.listView1.SelectedItems.Count ; i >=0 ; i --) 倒删除的方式 这样更加通俗
      

  11.   

    因为remove后索引会变动,所以要重新i--
    把索引更改一道貌似我不喜欢这么玩,这样太搅脑汁了
      

  12.   


    从前往后一个一个删除元素,每次总是删除this.listView1.SelectedItems[0]