我有以下代码...
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语句更改为if (string.IsNullOrWhitespace(request.Code))
,然后得到同样的问题。
如果删除try / catch并将代码仅保留在try块中,一切都很好。
所以,谁能解释这到底是怎么回事?
编辑:为了澄清request.Code的值,代码为“ WH1”,因此len为3。这就是调试器在尝试跳过if语句之前告诉我的内容。
编辑2:我得到了一个失败的测试,这就是导致我调试此代码的原因。但是现在测试通过了,我更改了问题中未显示的另一段代码。我的所有测试现在都通过了,但是当我通过它进行调试时,调试器仍然看起来像是在第一个if块中执行throw。非常令人困惑,但是如果我跳过该声明,它会按照我的预期进行。
[这似乎是调试器中的某种错误,因为未执行代码,只是游标将转到该代码,而对其不执行任何操作。
如果代码与要调试的代码不匹配,我以前就遇到过。您是使用“附加到进程”来调试过程,还是只是转到“调试”菜单并选择“开始调试”(F5)?您在调试项目的上方显示的代码还是在相关程序集中的代码?
您也可以尝试对整个解决方案进行重建。
根本没有运行代码,调试器只是去那一行,而实际上没有执行代码。