2014-02-24 83 views
2

動態鏈接變量值C#的問題,我有一個GUI安裝代碼在我的遊戲,如:與委託

for (int i = 0; i < count; i++) 
{ 
    ... 
    Button button = new Button(); 
    ... 
    button.handler = delegate { selectedIndex = i; }; 
    gui.Add(button); 
    ... 
} 

我要讓按鈕改變selectedIndexi電流值,這是它的創作。即button0將其更改爲0,將按鈕1更改爲1,依此類推。但它看起來像dinamycally鏈接值代表i變量和所有按鈕更改selectedIndexcount + 1。 如何解決它?

+0

[局部變量與委託]的可能重複(http://stackoverflow.com/questions/148669/local-variables-with-delegates) – Dirk

回答

3

您正遇到在匿名函數中捕獲到的內容的common problem。您在委託中捕獲了i,並且該值在循環過程中發生了變化。

你需要一個副本i的:

for (int i = 0; i < count; i++) 
{ 
    int copy = i; 
    ... 
    Button button = new Button(); 
    ... 
    button.handler = delegate { selectedIndex = copy; }; 
    gui.Add(button); 
    ... 
} 

注意foreach循環曾在C#4同樣的問題,但在C#5在foreach循環迭代變量是一個「新鮮」變量每次迭代。