Такое поведение настолько странно, что я даже не знаю, как лучше задать вопрос.
Учитывая следующий фрагмент кода C #:
public class Foo {
private bool _value = true;
// ...
protected void Method()
{
_value = true;
if(!_value) {
throw new Exception("What the...?!?!");
}
}
}
При подключении отладчика Visual Studio к приложению, выполняющему версию этого кода и проходящем через выполнение Method()
(используя шаг в или шаг за шагом), блок if
оценивается и выдается исключение. Устанавливая часы для переменной _value
, я вижу, что значение _value
равно false
в начале метода и не изменяется, когда я перехожу через / в оператор присваивания. Что еще интереснее, исключение составляет , а не , если я продолжаю выполнение (F5), хотя все по-прежнему не работает правильно.
Я столкнулся с этим, когда пытался выяснить, почему тестовые случаи NUnit работали при запуске с использованием ReSharper из Visual Studio, но не работали при запуске в графическом интерфейсе NUnit. Я подключил отладчик к графическому интерфейсу NUnit, установил несколько точек останова в тестах, которые неожиданно провалились, нашел места, где переменные не были установлены должным образом, которые должны быть установлены на основе вышеупомянутой переменной _value
, которая является своего рода флагом указав, что материал грязный или нет), и, таким образом, заметил странное поведение, при котором _value
не изменился (объект, создающий исключение, был добавлен позже и подтверждает, что я использовал правильные скомпилированные сборки!).
Итак, как на счет этого? Чем можно объяснить вышеупомянутое поведение?