none
Элемент "e" не существует в текущем контексте. RRS feed

  • Вопрос

  • Всем привет!

    Частенько возникает подобное сообщение.
    Не могу понять, с чем это может быть связано.

    Вот такой код, плиз.

    private bool Metod ()
    { ...
    double V=10,W=100;
    ...
    string S = V.ToString() + W.ToString(); // Ругается - W - не существует, про V молчок.
    }

    В этом случае я как-то пытаюсь объехать эту хрень,
    объвляю W глобальной переменной -
    ругаться прекращает, и я успокаиваюсь до следующего раза.

    Но вот такое сообщение возникло в строке -

    catch (Exception e) {...},

    не понравилась, видите ли, переменная "e".
    Тут уж я не стерпел...
    Может кто-нибудь объяснить,
    что ей надо от меня?

    • Перемещено YatajgaEditor 4 ноября 2013 г. 10:36
    4 ноября 2013 г. 9:10

Ответы

  • Это сообщение появляется в процессе набора текста или в процессе компиляции?

    Парсер хоть и быстро работает, но всё же ему требуется время. Поэтому часто выдаются сообщения об ошибках (часть кода подчёркивается красной волнистой линией), когда код ещё не набран до конца (хотя, можно сказать наоборот: парсер работает слишком быстро). Это нормально - в итоге код скомпилируется.

    А вот если код не комплируется... Ну, тогда есть верный способ решить проблемы: переставить Студию, а если не поможет - Винду...

    • Помечено в качестве ответа QazRdx 4 ноября 2013 г. 11:39
    4 ноября 2013 г. 11:14
  • А сейчас вдруг заработало.
    В catch-блоке добавил MessageBox.Show("Error\n"+e.ToString()) и все поехало.
    А до этого в отладке просто ставил точку останова, 
    и она мне выкатывала исключение в исключении.

    Да, так и есть.
    Если переменная не используется, то получите исключение в исключении.
    Всем спасибо, навели на мысль.
    • Изменено QazRdx 4 ноября 2013 г. 11:39
    • Помечено в качестве ответа QazRdx 4 ноября 2013 г. 12:00
    4 ноября 2013 г. 11:35
  • Снова возникло подобное сообщение - 
    "... не существует в текущем контексте..."
    более того, в рантайме объявленная, но глючная переменная 
    при наведении на нее мышки ничего о себе не сообщает,
    т.е. вообще ничего, как будто ее нет,
    хотя присвоение значения этой переменной вроде как происходит,
    а сообщение выдается, когда программа пытается использовать значение
    этой переменной.

    Установил новую студию - не помогло.
    Начал тупо исключать части кода с целью найти то, что мешает - не помогло.

    Создал новый проект, скопировал туда весь код - и вот оно счастье,
    все появилось. Видимо, что-то иногда портится в проекте и надо его просто 
    пересоздать и скопировать туда все, что надо.

    • Помечено в качестве ответа QazRdx 9 августа 2014 г. 0:45
    9 августа 2014 г. 0:45

Все ответы

  • Судя по всему вы пытаетесь использовать эту переменную в блоке перед которым она не была объявлена. Либо объявление происходит в блоке с условием. Покажите полный код метода.

    Сделаем содержимое сообщества лучше, вместе!

    4 ноября 2013 г. 10:38
    Модератор
  • В строке с catch объявление происходит в формальном параметре непосредственно при входе в catch.
    Нигде более никаких объявлений не требуется,
    и нигде более в этой программе переменная "e" не используется.
    В этом-то и проблема.
    Везде и всегда это работало.
    4 ноября 2013 г. 11:08
  • Т.е. выброс исключения происходит в самом блоке catch? Это происходи именно в отладчике и на этой строчке или в работающем коде в режиме Release?

    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа QazRdx 4 ноября 2013 г. 11:39
    • Снята пометка об ответе YatajgaEditor 4 ноября 2013 г. 12:20
    4 ноября 2013 г. 11:12
    Модератор
  • Это сообщение появляется в процессе набора текста или в процессе компиляции?

    Парсер хоть и быстро работает, но всё же ему требуется время. Поэтому часто выдаются сообщения об ошибках (часть кода подчёркивается красной волнистой линией), когда код ещё не набран до конца (хотя, можно сказать наоборот: парсер работает слишком быстро). Это нормально - в итоге код скомпилируется.

    А вот если код не комплируется... Ну, тогда есть верный способ решить проблемы: переставить Студию, а если не поможет - Винду...

    • Помечено в качестве ответа QazRdx 4 ноября 2013 г. 11:39
    4 ноября 2013 г. 11:14
  • Нет, все компилируется, запускается и работает.
    Исключение происходит в момент, когда в блоке try возникает ошибка,
    т.е. в тот момент, когда происходит обращение к catch.
    4 ноября 2013 г. 11:19
  • А сейчас вдруг заработало.
    В catch-блоке добавил MessageBox.Show("Error\n"+e.ToString()) и все поехало.
    А до этого в отладке просто ставил точку останова, 
    и она мне выкатывала исключение в исключении.

    Да, так и есть.
    Если переменная не используется, то получите исключение в исключении.
    Всем спасибо, навели на мысль.
    • Изменено QazRdx 4 ноября 2013 г. 11:39
    • Помечено в качестве ответа QazRdx 4 ноября 2013 г. 12:00
    4 ноября 2013 г. 11:35
  • "А до этого в отладке просто ставил точку останова, и она мне выкатывала исключение в исключении." - возможно отлачик просто выходил из этого блока, а когда вы наводите курсор на переменную в это время то она оказывается невычислимой, потому, что она локальная.

    Сделаем содержимое сообщества лучше, вместе!

    4 ноября 2013 г. 12:23
    Модератор
  • Нет, точка останова позицинировалась именно в catch-блоке -
    хотелось по-быстрее, ничего не печатая, посмотреть, что в переменной e,
    которую я вывел в отладочное окно "Контрольные значения".
    И именно здесь появлялось означенное сообщение.
    Опыт повторяется после удаления MessageBox-а.
    Так что, видимо, так и должно быть.
    4 ноября 2013 г. 13:34
  • Тогда, скорее всего, у вас студия глючит. Хотя это уже насколько понял не критично.

    Сделаем содержимое сообщества лучше, вместе!

    4 ноября 2013 г. 13:42
    Модератор
  • Возможно!
    Спасибо!
    Буду иметь ввиду.

    4 ноября 2013 г. 13:59
  • Снова возникло подобное сообщение - 
    "... не существует в текущем контексте..."
    более того, в рантайме объявленная, но глючная переменная 
    при наведении на нее мышки ничего о себе не сообщает,
    т.е. вообще ничего, как будто ее нет,
    хотя присвоение значения этой переменной вроде как происходит,
    а сообщение выдается, когда программа пытается использовать значение
    этой переменной.

    Установил новую студию - не помогло.
    Начал тупо исключать части кода с целью найти то, что мешает - не помогло.

    Создал новый проект, скопировал туда весь код - и вот оно счастье,
    все появилось. Видимо, что-то иногда портится в проекте и надо его просто 
    пересоздать и скопировать туда все, что надо.

    • Помечено в качестве ответа QazRdx 9 августа 2014 г. 0:45
    9 августа 2014 г. 0:45