Bu iyi çalışır içinde (beklendiği gibi anlamına gelir) C# 5.0:Yakalanan Kapatma (Döngü Değişken) C# 5.0
var actions = new List<Action>();
foreach (var i in Enumerable.Range(0, 10))
{
actions.Add(() => Console.WriteLine(i));
}
foreach (var act in actions) act();
Baskılar 9'a kadar 0 Ama bu bir 10. yıl için 10 kez gösterilmiştir:
var actions = new List<Action>();
for (var i = 0; i < 10; i++)
{
actions.Add(() => Console.WriteLine(i));
}
foreach (var act in actions) act();
Soru: Bu, C# sürümlerinde 5.0'dan önceki bir sorun oldu; bu nedenle, kapanış için bir döngü-yerel yer tutucusu kullanmak zorundaydık ve şimdi "foreach" döngülerinde C# 5.0'de düzeltildi. Ama "için" döngülerinde değil!
Bunun arkasındaki mantık nedir (sorunu for
döngülerinde de sabitlemiyor)?
"Bunun anlamı, '' döngüleri için de sabitlenmemesinin nedenleri '? –
İlk durumda bile çalışmasına şaşırdım ... foreach/for. Artık var olmamalıyım. Bana göre bu çok "tehlikeli" bir tasarım. – LightStriker
@LightStriker: No; bu bir özellik. Buna kapanma deniyor. – SLaks