较新的代码会影响较早的代码,调试器不应进入其代码块

问题描述 投票:0回答:2

我有以下代码...

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。非常令人困惑,但是如果我跳过该声明,它会按照我的预期进行。

[这似乎是调试器中的某种错误,因为未执行代码,只是游标将转到该代码,而对其不执行任何操作。

c# control-flow
2个回答
0
投票

如果代码与要调试的代码不匹配,我以前就遇到过。您是使用“附加到进程”来调试过程,还是只是转到“调试”菜单并选择“开始调试”(F5)?您在调试项目的上方显示的代码还是在相关程序集中的代码?

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.