這是從Access到Modified Closure的擴(kuò)展。我只想驗證以下內(nèi)容是否真的足夠安全用于生產(chǎn)。List<string> lists = new List<string>();//Code to retrieve lists from DB foreach (string list in lists){ Button btn = new Button(); btn.Click += new EventHandler(delegate { MessageBox.Show(list); });}每次啟動我只會執(zhí)行一次以上操作。目前看來,它工作正常。正如喬恩(Jon)在某些情況下提到的違反直覺的結(jié)果。那么,我需要在這里注意什么?如果列表多次運行,可以嗎?
3 回答

aluckdog
TA貢獻(xiàn)1847條經(jīng)驗 獲得超7個贊
這很棘手,但是上面的解釋對我來說很清楚: 這似乎是正確的,但實際上,每當(dāng)單擊任何按鈕時,只會使用str變量的最后一個值。這樣做的原因是foreach進(jìn)入了while循環(huán),但是迭代變量是在該循環(huán)之外定義的。這意味著,當(dāng)您顯示消息框時,str的值可能已經(jīng)被迭代為字符串集合中的最后一個值。
- 3 回答
- 0 關(guān)注
- 469 瀏覽
添加回答
舉報
0/150
提交
取消