關於collection的操作注意。

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

   寫了個程序,用來從一個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,太恐怖了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章