Я разрабатываю плагин для более крупного приложения и столкнулся со странной проблемой со следующим кодом.При запуске в режиме Release или в Debug без точек останова все в порядке.Но когда я ставлю точку останова где-то рядом с фрагментом ниже, я получаю ошибку.Похоже, что отладчик предварительно оценивает код внутри блоков if, вызывающих ошибку, хотя этот код фактически никогда не достигается.
Обратите внимание, что индексатор внутренне проверяет некорректные индексы и запускает событие вплоть до основного приложения.Основное приложение обрабатывает это событие ошибки, показывая диалоговое окно и закрывая себя.Я не могу изменить основное приложение и не могу изменить индексатор (хотя я думаю, что может сработать исключение вместо запуска события).
int a = GetA(); // returns 0
if (a == 1)
{
_manager[a - 1][ColumnName.Name] = "X"; //Manager has an indexer returning a DataRow.
}
if (a == 2)
{
_manager[a - 1][ColumnName.Name] = "Y";
}
Когда я отключил «Включить оценку свойства идругие неявные вызовы функций "в Сервис-> Параметры-> Отладка работали отлично.У вас есть идеи, как обойти это?Мне не нужны эти сообщения об ошибках, но я также не хочу терять удобство оценки отладчика.
[ПРАВИТЬ] Я переписал описание.
[ОБНОВЛЕНИЕ] Я временно изменил код внутри индексатора, чтобы сгенерировать исключение, которое было связано с делегированием события на верхний уровень обработки ошибок, и это помогло.Отладчик VS проглотил исключение, поэтому все побочные эффекты прекратились (никакие окна сообщений не отображались слоем обработки ошибок)
Так что вопрос:
Есть ли третий вариант, кроме:
1) Постоянный переход от всплывающего события на верхний уровень к исключению
2) Снятие отметки «Включить оценку свойства и другие неявные вызовы функций»