我遇到了一个很奇怪的问题。
这是我的代码:
private async Task BreakExpectedLogic()
{
bool test = false;
if (test == true)
{
Console.WriteLine("Hello!");
throw new Exception("BAD HASH!");
}
}
看起来很简单,它不应该命中 Console.WriteLine
或 throw
。
由于某种原因,它总是命中 throw
。
如果我将 throw
移动到它自己的方法中,那么它就可以正常工作。我的问题是它如何忽略 if
block 并触发 throw new Exception
:
编辑 1: 我更新了我的代码以包含签名,我删除了与此问题无关的所有内容并运行它,它仍然发生。
最佳答案
这似乎是 async
方法中的错误,代码 并未 实际执行,但调试器使用 throw
语句进入该行。如果在 if
中的 throw
语句之前有一些代码行,这些行被忽略,调试器仅到带有 throw< 的行
声明。
此外,如果您不使用变量 - if (false)
或 if (true == false)
则调试器会转到正确的代码行 -右大括号。
此错误已由 @Matthew Watson 发布到 Visual Studio 团队(链接现在不可用)。
另请参阅类似问题 - Condition check in async method
编辑(2017-10-06):
问题无法在使用 .Net Framework 4.7 的 VS 2017 15.3.5 中重现。似乎 VS 团队已经解决了这个问题。
关于c# - if (false == true) 在内部抛出异常时执行 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42553039/