如何在VB .NET中解决此范围问题?

时间:2010-04-16 14:19:32

标签: scope vb.net

我有一个像这样的代码结构:

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关键字有关吗?除了命名第二个索引变量之外,还有任何关于如何解决这个问题的建议吗?

3 个答案:

答案 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