Mam fragment kodu, że myślałem, będzie działać z powodu zamknięcia; jednak wynik jest inny. Co się tutaj dzieje, aby nie wytworzyć oczekiwanego wyniku (jednego z każdego słowa)?Odd (pętla/gwint/string/lambda) zachowanie w C#
Kod:
string[] source = new string[] {"this", "that", "other"};
List<Thread> testThreads = new List<Thread>();
foreach (string text in source)
{
testThreads.Add(new Thread(() =>
{
Console.WriteLine(text);
}));
}
testThreads.ForEach(t => t.Start())
wyjściowa:
other
other
other
tu znowu .... – leppie
To powinno być ostrzeżenie kompilatora jak to jest w VB. Myślę, że to głupie, że zespół C# nie ostrzega ludzi przed potencjalnymi problemami. –
Duplikat: [C# - identyfikator foreach i zamknięć] (http://stackoverflow.com/questions/512166/c-the-foreach-identifier-and-closures) – Shog9