Как решить эту проблему в VB .NET? - PullRequest
4 голосов
/ 16 апреля 2010

У меня есть структура кода примерно так:

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 - "Variable" arrayIndex "скрывает переменную ограждающий блок. " Насколько я могу судить, arrayIndex является локальным по отношению к первому циклу for и не должен существовать к тому времени, когда мы достигнем второго цикла. Если я пытаюсь изменить второе объявление arrayIndex на arrayIndex = 0, я получаю ошибку "Имя 'arrayIndex' не объявлено", как я и ожидал. Так это видно или нет? Это как-то связано с ключевым словом Dim? Любые предложения о том, как обойти это, кроме именования второй индексной переменной чем-то другим?

Ответы [ 3 ]

3 голосов
/ 16 апреля 2010

Так это видно или нет?

Наоборот.Переменная external видна во внутренней области видимости.К нему нельзя получить доступ, потому что он еще не был объявлен и, следовательно, его время жизни еще не началось.Но имя уже существует в области.

Это как-то связано с ключевым словом Dim?

Не совсем, это простоограничение того, как работают области в VB.Переменная существует в области действия даже до того, как началось ее время жизни.Поскольку его имя переносится во вложенные области, никакая другая переменная там не может иметь такое же имя.

2 голосов
/ 16 апреля 2010

Почему бы просто не переместить его за пределы цикла и выполнить сброс после первого [одного]?

1 голос
/ 16 апреля 2010

Точно так же, как @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
...