1
我有以下代碼:爲什麼我的Button沒有正確地註冊輸出?
void Setup(CityBuilding[] buildings) {
foreach (CityBuilding building in buildings)
{
GameObject buildingDisp = Instantiate(singleGoodsDisplay);
//... Other stuff not relevent happens here
buildingDisp.GetComponent<Button>().onClick.AddListener(() => { ProcessClick(building); });
Debug.Log(building);
}
}
private void ProcessClick(CityBuilding building)
{
Debug.Log(building);
}
底線是,我有一個保存爲一個預製和實例化的幾個按鈕。我正在以一個lambda函數的形式向它添加一個onClick監聽器。我傳入一個數據對象。現在buildings
是兩個數組。我看到兩個項目都被調試,但是,當我實際點擊按鈕時,我總是看到第二個項目被使用,而不是第一個項目。我不太確定我做錯了什麼。有什麼想法嗎?謝謝!
我不知道在C#中的行爲是否相同,但如果您在JavaScript中有類似的事情,那麼點擊發生時,本地「建築物」將始終引用集合中的最後一個項目。 –
顯然它在C#5中被更改了,所以變量在每次迭代中都被視爲「新」,因此無視。 –