我有一个相当奇怪的问题正在发生。
这是我的代码:
private async Task BreakExpectedLogic()
{
bool test = false;
if (test == true)
{
Console.WriteLine("Hello!");
throw new Exception("BAD HASH!");
}
}
看起来很简单,它不应该碰到
Console.WriteLine
或 throw
。出于某种原因,它总是达到
throw
。如果我将
throw
移动到它自己的方法中,那么它工作正常。我的问题是它如何忽略 if
块并点击 throw new Exception
:编辑 1: 我已经更新了我的代码以包含签名,我已经删除了与这个问题无关的所有内容并运行它,它仍然发生。
最佳答案
这似乎是 async
方法中的错误,代码 不是 实际执行,而是调试器使用 throw
语句执行。如果在 throw
内的 if
语句之前有一些代码行,这些行将被忽略,调试器步骤 仅 到语句 3251318 的行。
此外,如果您不使用变量 - throw
或 if (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/