Tôi đến từ một nền tảng lập trình chức năng tại thời điểm này, vì vậy hãy tha thứ cho tôi nếu tôi không hiểu đóng cửa trong C#.Đóng cửa trong các đại biểu xử lý sự kiện của C#?
Tôi có đoạn code sau đây để tự động tạo Buttons rằng có được xử lý sự kiện nặc danh:
for (int i = 0; i < 7; i++)
{
Button newButton = new Button();
newButton.Text = "Click me!";
newButton.Click += delegate(Object sender, EventArgs e)
{
MessageBox.Show("I am button number " + i);
};
this.Controls.Add(newButton);
}
tôi mong đợi các văn bản "I am button number " + i
phải đóng cửa với giá trị của i
ở đó lặp đi lặp lại của vòng lặp for. Tuy nhiên, khi tôi thực sự chạy chương trình, mọi Nút nói I am button number 7
. Tôi đang thiếu gì? Tôi đang sử dụng VS2005.
Chỉnh sửa: Vì vậy, tôi đoán câu hỏi tiếp theo của tôi là, làm cách nào để nắm bắt giá trị?
Bạn không nắm bắt được giá trị. Bạn không bao giờ nắm bắt các giá trị, chỉ các biến. Để biết thêm thông tin về vấn đề này, hãy xem http://blogs.msdn.com/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx và http: //blogs.msdn .com/ericlippert/archive/2009/11/16/đóng-over-the-loop-biến-part-two.aspx –