我有以下代码......
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。非常令人困惑,但如果我按照我的预期继续执行该声明。
它似乎是调试器中某种类型的错误,因为代码没有被执行,只是光标转到那个代码并且什么都不做。
答案 0 :(得分:0)
如果代码与正在调试的代码不匹配,我之前遇到过此问题。您是否正在使用"附加到流程"来调试流程?或者你只是去调试菜单并选择"开始调试" (F5)?您在上面显示的代码是您正在调试的项目的一部分,还是在相关的程序集中?
您也可以尝试重建整个解决方案。
答案 1 :(得分:0)
代码根本没有运行,调试器只是去那行但实际上没有执行代码。