Как я могу получить значение внешней переменной внутри лямбда-выражения?
Я только что столкнулся со следующим поведением:
for (var i = 0; i < 50; ++i) {
Task.Factory.StartNew(() => {
Debug.Print("Error: " + i.ToString());
});
}
Результатом будет серия «Ошибка: х», где большинство х равно 50.
Так же:
var a = "Before";
var task = new Task(() => Debug.Print("Using value: " + a));
a = "After";
task.Start();
Результатом будет & quot; Использование значения: после & quot ;.
Это ясно означает, что конкатенация в лямбда-выражении происходит не сразу. Как можно использовать копию внешней переменной в лямбда-выражении во время объявления выражения? Следующее не будет работать лучше (что не обязательно противоречиво, я признаю):
var a = "Before";
var task = new Task(() => {
var a2 = a;
Debug.Print("Using value: " + a2);
});
a = "After";
task.Start();