У какого-то коллеги возникла очень странная проблема отладки, в которой он переходит через переключатель, переходит к некоторому случаю, но все же после этого он затрагивает также случай по умолчанию. Я понятия не имею, как это может произойти!
Это легко воспроизводимо, и я наконец-то извлек код в небольшой тест.
Если поставить точку останова только для случая по умолчанию, то отладчик никогда не остановится на этом. Но если я добавлю точку останова в случае 42, а затем использую команду step over, то она попадет в случай по умолчанию !! Обратите внимание, что улов никогда не достигается, хотя. Таким образом, кажется, что отладчик показывает то, чего на самом деле не происходит? Кроме того, если я удаляю задачу asyn c и жду, тогда это не произойдет .. Нам также нужен другой случай, который объявляет переменную (что-то причудливое, а не простое целое число и т. Д. c ..)
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);
}
GIF, созданный Синатром для иллюстрации топи c, спасибо!