我有一个像这样的代码结构:
For row = 1 To numRows
Dim arrayIndex As Integer = 0
For column As Integer = startColumn To endColumn
' whatever code
arrayIndex = arrayIndex + 1
Next
Next
Dim arrayIndex As Integer = 0
For column As Integer = startColumn To endColumn
' whatever code
arrayIndex = arrayIndex + 1
Next
不完全是代码,所以我真的不需要关于重构的建议,但我的问题是这个 - 用这段代码我得到第一个Dim arrayIndex As Integer = 0
的编译错误 - “变量'arrayIndex'隐藏变量在一个封闭的街区。“据我所知,arrayIndex是第一个for循环的本地,在我们到达第二个循环时不应该存在。如果我尝试将arrayIndex的第二个声明更改为arrayIndex = 0
,我会收到错误“名称'arrayIndex'未声明”,正如我预期的那样。那么它是否可见?这与Dim关键字有关吗?除了命名第二个索引变量之外,还有任何关于如何解决这个问题的建议吗?
答案 0 :(得分:3)
它是否可见?
反过来说。 外部变量在内部范围内可见。它无法访问,因为它尚未声明,因此其生命周期尚未开始。但是名称中的名称已经存在。
这是否与Dim关键字有关?
实际上,它只是限制范围在VB中的工作方式。即使在生命周期开始之前,变量也存在于范围 中。由于其名称被转移到嵌套范围,因此其他变量不能具有相同的名称。
答案 1 :(得分:2)
为什么不将它移到循环之外并在第一个[1]之后重置它?
答案 2 :(得分:1)
就像@shadeMe说的那样,DIM在外面,将其分配到
中Dim arrayIndex As Integer
For row = 1 To numRows
arrayIndex = 0
For column As Integer = startColumn To endColumn
' whatever code
arrayIndex = arrayIndex + 1
Next
Next
arrayIndex = 0
For column As Integer = startColumn To endColumn
' whatever code
arrayIndex = arrayIndex + 1
Next