[問題] Closure的問題
小弟覺得應該是發生Closure的問題吧?
我想在10個按鈕上面掛10個觸發事件,Code大致上像:
for(int index = 0;index < 10;index++){
btn[index].onClick += () =>
{
Console.WriteLine(index.toString());
};
}
結果10個按鈕按下去,都是10...
試了很久都沒找到解決方式,目前是採用類似分成10段來寫的方法,
但我覺得這應該是很常見的狀況,應該有更合理的解決辦法吧?
想請問有沒有高手能幫我解答一下,非常感謝~
以下附上一段Sample Code:
class Program
{
static Button[] btnArray;
static void Main(string[] args)
{
btnArray = new Button[10];
for (int index = 0; index < 10; index++) {
btnArray[index] = new Button();
btnArray[index].onClick += () =>
{
Console.WriteLine(index.ToString());
};
}
foreach (Button btn in btnArray) {
btn.Click();
}
Console.ReadKey();
}
}
class Button {
public delegate void Del();
public event Del onClick;
public void Click() {
onClick();
}
}
希望的要求是能夠列出 1~10,但結果都是10
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.223.20.242
※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1428410250.A.08E.html
推
04/07 20:53, , 1F
04/07 20:53, 1F
嗯~目前我手上可能沒辦法PO出比較完整的code @@
不過onClick在Button的Class中是這樣:
public delegate void BtnDel();
public event BtnDel onClick;
※ 編輯: jamod (61.223.20.242), 04/07/2015 20:59:27
→
04/07 21:11, , 2F
04/07 21:11, 2F
※ 編輯: jamod (61.223.20.242), 04/07/2015 21:37:10
→
04/07 21:40, , 3F
04/07 21:40, 3F
→
04/07 21:41, , 4F
04/07 21:41, 4F
我是希望btn[0]對應到Console.WriteLine("0");
btn[1]對應到Console.WriteLine("1");
.
.
.
以此類推
但出來的結果是btn[0]對應到Console.WriteLine("10");
btn[1]對應到Console.WriteLine("10");
.
.
.
※ 編輯: jamod (61.223.20.242), 04/07/2015 22:03:54
討論串 (同標題文章)