Переменная '<variablename>' скрывает переменную во включающем блоке - PullRequest
3 голосов
/ 02 августа 2010

При копировании и вставке фрагмента кода из MSDN я обнаружил ошибку в заголовке - Переменная '' скрывает переменную во включающем блоке ,

Все яСкопированный был очень простой пример цикла try.

Как говорится в предложении «Распространенной причиной этой ошибки является использование Catch e As Exception внутри обработчика событий. Если это так, то nameпеременная Catch block ex, а не e. "

Итак, я сделал это, изменил оба e на ex, и это сработало, однако я не понимаю, почему это не вызывает то же самоеошибка.

Может кто-нибудь объяснить, что это за ошибка, и почему e ее вызывает, а ex нет?

edit -

пример кода ...

    Try
    Catch e As Exception
        msgbox(e.Message)
    End Try

.

    Try
    Catch ex As Exception
        msgbox(ex.Message)
    End Try

Что я не понимаю, так это то, почему первый вызываетпроблема, а вторая не для меня, это как ... Использование яблок вверху, яблок внизу - говоря, что нельзя использовать одно и то же в обоих местах, затем переходя на оба апельсина и внезапно позволяя ему работать.Конечно, второй делает то же самое, что и первый.

Ответы [ 3 ]

13 голосов
/ 02 августа 2010

Возможно, вы захотите вставить полный код для подтверждения ошибки, но я бы предположил, что обработчик событий определяет параметр с именем «e». Затем, когда вы помещаете блок catch, он также пытается определить «e», вызывая данную ошибку. Конечно, когда уловка определяет «ex» вместо «e», тогда не происходит никакого столкновения имен, поэтому оно работает.

Редактировать: Отредактировано, чтобы добавить более ясный пример того, что я предполагаю, является нарушенный код.

Полагаю, ваш взломанный код выглядит так:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    Try
    Catch e As Exception
        msgbox(e.Message)
    End Try
End Sub

Вы можете увидеть два объявления e, одно в ByVal e As System.EventArgs, а другое в Catch e As Exception.

9 голосов
/ 02 августа 2010

Это сообщение об ошибке означает, что вы объявляете переменную с именем, которое уже существует:

int abc = 0;
if (abc == 0)  {
  int abc = 1;  // Error
}

Это правило, конечно, относится и к попыткам .. поймать.

0 голосов
/ 16 апреля 2014

Да. переименуйте переменную, вызывающую проблему, в уникальное имя.

...