关于collection的操作注意。

博主编写程序,将自己写的user control从一个panel移动到另一个panel时出错。原代码使用foreach遍历控件,后分析出错原因是Controls改变导致foreach找不到对象,后续对代码进行了修改。

   写了个程序,用来从一个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,太恐怖了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值