私はこのコードを持っています:
int i = 0;
foreach(var tile in lib.dic.Values)
{
var ii = i;
var t = tile;
Button b = new Button( () = > { MainStatic.tile = t; } );
Checkbox c = new Checkbox( () = > { lib.arr[ii].b = !lib.arr[ii].b; } );
i++;
}
上記のコードは正常に機能しますが、次の部分は次のとおりです。
int i = 0;
foreach(var tile in lib.dic.Values)
{
Button b = new Button( () = > { MainStatic.tile = tile; } );
Checkbox c = new Checkbox( () = > { lib.arr[i].b = !lib.arr[i].b; } );
i++;
}
… は常にi
とtile
変数の最後の値でデリゲートを実行します。なぜこれが起こるのか、なぜそれらの変数、特に非参照型のローカルコピーを作成する必要があるのint i
ですか?