【发布时间】:2017-07-26 03:14:13
【问题描述】:
我正在循环创建一个定时器数组并给每个定时器一个函数
这是我所做的:
dim timer(10) as Timer
for i = 0 to 5
timer(i) = new Timer
AddHandler timer(i).Tick, Function(senderX, eX) timerFunction(i)
next
我有这个功能:
Private Function timerFunction(ByVal timerNo As Integer)
MsgBox(timerNo)
End Function
但是对于我用这个调用的每个timer,我都会得到6 作为timerNo 的值:
timer(3).Start()
即使在我将参数更改为从1 到5 的数字时,我也会输出6
为什么会这样?
【问题讨论】:
-
timerFunction的timerNo值是在调用函数时计算的,而不是在您执行AddHandler时计算的。见ericlippert.com/2009/11/12/… -
你应该得到一个编译器警告:“BC42324 在 lambda 表达式中使用迭代变量可能会产生意想不到的结果。相反,在循环中创建一个局部变量并为其分配迭代变量的值。 "