C# 7 семантика сопоставления с образцом
У меня есть два блока кода, которые я хотел бы считать равными:
Затем то же самое, но преобразуется в регистр переключения типов. (извините за плохие красные волнистые маркеры Resharper, Resharper пока не понимает этого)
Код на основе коммутатора сгенерирует исключительную ссылку Null на первом return Actor.Done
который не является нулевым.
Это ошибка сопоставления с образцом или есть какая-то семантика, которую я здесь упускаю?
[править] Я нашел исправление для этого..
Меняем это:
case MessageEnvelope env:
в
case MessageEnvelope _:
var env = m as MessageEnvelope;
Делает все это работает. Таким образом, возникает вопрос: не должны ли эти строки быть совершенно одинаковыми?
1 ответ
Это известная ошибка, когда вы фиксируете (в лямбде) переменную шаблона, которая была объявлена в операторе switch. См. https://github.com/dotnet/roslyn/issues/16066