一些同事遇到了一个非常奇怪的调试问题,他单步执行开关,单步执行某些情况,但随后又遇到了默认情况。我不知道这怎么会发生!
它很容易重现,我终于将代码提取到一个小测试中。
如果我只在默认情况下设置断点,那么调试器将永远不会停在那里。但是如果我在case 42处添加断点,然后使用step over,之后会碰到default case!!请注意,尽管从未达到过捕获。所以调试器似乎显示了一些实际上没有发生的事情?另外,如果我删除异步任务并等待,那么它不会发生..我们还需要另一个声明变量的案例(花哨的东西,不是简单的整数等。)
public class Foo
{
public readonly string Bar = nameof(Bar);
}
public async Task DoSomething(int x)
{
try
{
switch (x)
{
case 43:
var foo = new Foo();
break;
case 42:
Console.WriteLine(x);
break;
default:
throw new NotImplementedException("aaarghh..");
}
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
}
private async void btnSomethingTo_Click(object sender, EventArgs e)
{
await DoSomething(42);
}
Run Code Online (Sandbox Code Playgroud)
Sinatr 创建的 GIF 用于说明手头的主题,谢谢!
