我有一个相当奇怪的问题正在发生。

这是我的代码:

private async Task BreakExpectedLogic()
{
    bool test = false;
    if (test == true)
    {
        Console.WriteLine("Hello!");
        throw new Exception("BAD HASH!");
    }
}

看起来很简单,它不应该碰到 Console.WriteLinethrow
出于某种原因,它总是达到 throw

如果我将 throw 移动到它自己的方法中,那么它工作正常。我的问题是它如何忽略 if 块并点击 throw new Exception :

c# - 如果(false == true)在内部抛出异常时执行块-LMLPHP

编辑 1: 我已经更新了我的代码以包含签名,我已经删除了与这个问题无关的所有内容并运行它,它仍然发生。

最佳答案

这似乎是 async 方法中的错误,代码 不是 实际执行,而是调试器使用 throw 语句执行。如果在 throw 内的 if 语句之前有一些代码行,这些行将被忽略,调试器步骤 到语句 3251318 的行。

此外,如果您不使用变量 - throwif (false),那么调试器将转到正确的代码行 - 到右花括号。

此错误已由 @Matthew Watson 发布给 Visual Studio 团队(链接现在不可用)。

另外,请参阅类似的问题 - Condition check in async method

编辑(2017/10/06):

无法在使用 .Net Framework 4.7 的 VS 2017 15.3.5 中重现问题。好像 VS 团队已经解决了这个问题。

关于c# - 如果(false == true)在内部抛出异常时执行块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42553039/

10-13 03:17