关于collection的操作注意。

来源:互联网 发布:哪个软件可以播音 编辑:程序博客网 时间:2024/05/13 06:39

   写了个程序,用来从一个panel中将我自己写的user control移动到另外一个panel,如下

 

         private void MoveViewers(InfoList sourceList, InfoList targetList)

         {

              foreach (object viewer in sourceList.Controls)

              {

                   if (((InfoViewer) viewer).Checker.Checked)

                        targetList.Controls.Add((InfoViewer) viewer);

              }

         }

   

   谁知道,居然出错,郁闷,想了想,应该是Controls在变造成foreach找不到对象了。

   修改如下:

 

         private void MoveViewers(InfoList sourceList, InfoList targetList)

         {

              Queue queqe = new Queue();

 

              foreach (object viewer in sourceList.Controls)

              {

                   if (((InfoViewer) viewer).Checker.Checked)

                       queqe.Enqueue(viewer);

              }

 

              while (queqe.Count != 0)

              {

                   targetList.Controls.Add((InfoViewer) queqe.Dequeue());

              }

         }

 

   BUG修复,已经好用了。

 

   感叹,OOP一不小心,一个想当然的想法就会造成一个BUG,太恐怖了。

原创粉丝点击