Более поздний код, влияющий на более ранний код, отладчик, входящий в блок кода, который он не должен вводить
У меня есть следующий код...
var len = request.Code.Trim().Length;
if (len.Equals(0))
{
throw new ArgumentOutOfRangeException("request.Code");
}
try
{
var obj = _repository.GetSomething(request.Code);
return Result.Success(obj);
}
catch (Exception)
{
return Result.Failure(MessageCode.MissingData);
}
Я бегу через этот код с помощью отладчика (через модульный тест), и он идет в if (len.Equals(0))
блок, когда len равен 3. Я также попытался изменить операторы if на if (string.IsNullOrWhitespace(request.Code))
и я получаю ту же проблему.
Если я удаляю try / catch и оставляю только код в блоке try, все в порядке.
Итак, кто-нибудь может объяснить, что здесь происходит?
РЕДАКТИРОВАТЬ: Чтобы уточнить значение request.Code - "WH1", следовательно, len - 3. Это то, что говорит мне отладчик перед тем, как я попытаюсь перешагнуть оператор if.
РЕДАКТИРОВАТЬ 2: я получил провальный тест, который привел меня к отладке этого кода. Но теперь, когда тест пройден, я изменил другой фрагмент кода, не показанный в моем вопросе. Все мои тесты проходят сейчас, но когда я отлаживаю через него, отладчик все равно выглядит так, как будто он выполняет бросок в первом блоке if. Очень запутанно, но если я перейду к заявлению, оно будет продолжаться, как я и ожидал.
Похоже, это какая-то ошибка в отладчике, поскольку код не выполняется, просто курсор переходит к этому коду и ничего с ним не делает.
2 ответа
Код вообще не запускался, отладчик просто шел к этой строке, но фактически не выполнял код.
Я сталкивался с этим раньше, если код не соответствует отлаживаемому коду. Отлаживаете ли вы процесс с помощью "Присоединить к процессу" или просто заходите в меню "Отладка" и выбираете "Начать отладку" (F5)? Является ли код, который вы показываете выше, частью проекта, который вы отлаживаете, или он находится в связанной сборке?
Вы также можете попробовать сделать перестройку всего решения.