Re: [問題] Closure的問題
※ 引述《jamod (jasper)》之銘言:
: 小弟覺得應該是發生Closure的問題吧?
: 我想在10個按鈕上面掛10個觸發事件,Code大致上像:
: for(int index = 0;index < 10;index++){
: btn[index].onClick += () =>
: {
: Console.WriteLine(index.toString());
: };
: }
: 結果10個按鈕按下去,都是10...
for (int i = 0; i < 10; i++) {
int localVariable = i;
btn[i].onClick += () => {
Console.WriteLine(localVariable.toString());
};
}
這裡的問題是因為你只宣告了一個 index
所有的 closures 都會 capture 到同一個變數, 而這個變數又是 loop index
當 i++ 時, 所有 closures 都會被影響(因為它們使用的變數是同一個東西)
解法就是為每一個 closure 宣告一個 local variable 來 capture
在這裡, 等於每個 iteration 都會把 loop index 複製一份
所以每個 closure capture 到的變數會是獨立的, 也與 loop index 獨立
就可以繞過你的問題
--
╱ ̄ ̄ ̄╲
▏◢█◣ ▏
︻█︻█ ▏ 成龍表示: 是喔...
′/ ‵ ▏
╰╯ █╱
ψQSWEET ◥︶█◤
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.161.94.175
※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1428418321.A.FC2.html
※ 編輯: uranusjr (218.161.94.175), 04/07/2015 22:53:18
推
04/07 23:40, , 1F
04/07 23:40, 1F
→
04/07 23:41, , 2F
04/07 23:41, 2F
推
04/08 21:23, , 3F
04/08 21:23, 3F
→
04/08 21:23, , 4F
04/08 21:23, 4F
→
04/10 02:08, , 5F
04/10 02:08, 5F
→
04/10 02:08, , 6F
04/10 02:08, 6F
→
04/10 02:08, , 7F
04/10 02:08, 7F
→
04/10 02:09, , 8F
04/10 02:09, 8F
→
04/10 02:10, , 9F
04/10 02:10, 9F
推
05/15 07:14, , 10F
05/15 07:14, 10F
討論串 (同標題文章)
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章