后来的代码影响了早期的代码,调试器进入代码块,它不应该进入

时间:2011-12-12 15:02:57

标签: c# flow-control

我有以下代码......

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);
}

我正在使用调试器(通过单元测试)运行此代码,并且当len为3时它将进入if (len.Equals(0))块。我还尝试将if语句更改为{{ 1}}我得到同样的问题。

如果我删除try / catch并只在try块中保留代码,那么一切都很好。

那么,任何人都能解释一下这里到底发生了什么吗?

修改 澄清request.Code的值是" WH1",因此len是3.在我尝试跳过if语句之前调试器告诉我的是什么。

编辑2: 我得到了一个失败的测试,这导致我调试此代码。但现在测试正在通过,我改变了我的问题中没有显示的另一段代码。我现在所有的测试都通过但是当我通过它进行调试时,调试器仍然看起来好像它在第一个if块中执行throw。非常令人困惑,但如果我按照我的预期继续执行该声明。

它似乎是调试器中某种类型的错误,因为代码没有被执行,只是光标转到那个代码并且什么都不做。

2 个答案:

答案 0 :(得分:0)

如果代码与正在调试的代码不匹配,我之前遇到过此问题。您是否正在使用"附加到流程"来调试流程?或者你只是去调试菜单并选择"开始调试" (F5)?您在上面显示的代码是您正在调试的项目的一部分,还是在相关的程序集中?

您也可以尝试重建整个解决方案。

答案 1 :(得分:0)

代码根本没有运行,调试器只是去那行但实际上没有执行代码。