c# - if (false == true) 在内部抛出异常时执行 block

标签 c# .net visual-studio .net-core

我遇到了一个很奇怪的问题。

这是我的代码:

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

看起来很简单,它不应该命中 Console.WriteLinethrow。 由于某种原因,它总是命中 throw

如果我将 throw 移动到它自己的方法中,那么它就可以正常工作。我的问题是它如何忽略 if block 并触发 throw new Exception:

Here is some evidence

编辑 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/

相关文章:

c# - XAML 中图标格式的最佳实践(SVG、路径数据点、几何/XAML 或字体)

c# - 在C#中选择带有正则表达式的主机名?

c# - 计算上传传输速度问题

visual-studio - 遇到异常。这可能是由 Visual Studio 2013 中的扩展引起的

c# - ResXFileCodeGenerator - 覆盖输出(想要使用自定义资源管理器)

c# - 使用 Entity Framework Code-First 方法在 SQL CE 4 中存储文件

c# - asp net with visual studio 代码恢复包

c# - 有没有办法将 C# 类或库自动转换为 Visio?

c# - 制作 xaml 子元素的副本

c# - 附加到 Windows 应用程序中的 json 文件