này hoạt động tốt (có nghĩa như mong đợi) trong C# 5.0:chụp Đóng cửa (Vòng Variable) trong 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();
Prints từ 0 đến 9. Tuy nhiên, một điều này cho thấy 10 trong 10 lần:
var actions = new List<Action>();
for (var i = 0; i < 10; i++)
{
actions.Add(() => Console.WriteLine(i));
}
foreach (var act in actions) act();
Câu hỏi: Đây là sự cố mà chúng tôi có trong các phiên bản C# trước phiên bản 5.0; vì vậy chúng tôi đã phải sử dụng một trình giữ chỗ cục bộ vòng lặp cho việc đóng và nó đã được sửa ngay bây giờ - trong C# 5.0 - trong các vòng "foreach". Nhưng không phải trong "cho" vòng!
Lý do đằng sau điều này (không khắc phục sự cố cho các vòng lặp for
)?
Bạn có nghĩa là "lý do cho nó không được cố định cho các vòng' for' "không? –
Tôi ngạc nhiên vì nó thậm chí còn hoạt động trong trường hợp đầu tiên ... Vì bạn chạy Action sau khi thoát khỏi phạm vi của foreach/for. 'Var i' không tồn tại nữa. Với tôi, đó là một thiết kế rất "nguy hiểm". – LightStriker
@LightStriker: Không; đó là một tính năng. Nó được gọi là một đóng cửa. – SLaks