当我们用循环给一个ListView添加信息是,比如下面的这段代码
  while
{
ListViewItem lvi=new ListViewItem(this.No);
item.SubItems.Add(this.Name);
item.SubItems.Add(this.Age);
item.SubItems.Add(this.Grade);
this.listView1.items.Add(item);
}
此时,其实已经存在很多个名字为 lvi的ListViewItem ,但是我们平时在编写代码时是不允许有同名的变量的,放在循环里面的话,为什么编译器能够通过?,内部是如何区分这些同名的变量的?

解决方案 »

  1.   

    这个是局部变量的生命周期的问题。
    每一次循环结束之后,lvi会变成内存垃圾待回收。编绎器不认为有这样的变量存在,所以不会出问题。
      

  2.   

    出了while循环,lvi就不存在了,当再次实例化的时候,实际上上次的结果已经没有了。
      

  3.   

    编译器在检查语法错误时  不可能执行while循环  也就不可能认为你定义了多个 lvi
      

  4.   

    lvi的生命週期只有在while的{}裏面,當再一次進入循環體進行實例化的時候,lvi已經死了,不存在這個實例了,當你new一個lvi的時候這又是一個新的生命
      

  5.   

    要么自己控制不产生重名,要么添加前先找找有没有存在的,好像有find之类的方法
      

  6.   

    这个list生命周期只有一次的循环
      

  7.   

    for循环中的变量,声明周期就知道for方法体一次,每循环一次,开始声明的lvi变量,在进入下次循环钱,GC会释放回收,然后新的循环时lvi就被重新声明赋值了,与上次的没有关系了。
      

  8.   

    这里面的出了while循环,是指所有while 循环,还是指这一次的while循环?
      

  9.   

    这里面的出了while循环,是指所有while 循环,还是指这一次的while循环?就这一次的循环。
      

  10.   

    嗯,我之前也是这么理解的,只是如果程序运行的话,还是会产生多个lvi的,