C# 7 семантика сопоставления с образцом

У меня есть два блока кода, которые я хотел бы считать равными:

Сначала if основанный блок IF на основе кода

Затем то же самое, но преобразуется в регистр переключения типов. (извините за плохие красные волнистые маркеры Resharper, Resharper пока не понимает этого)

SWITCH код

Код на основе коммутатора сгенерирует исключительную ссылку Null на первом return Actor.Done который не является нулевым.

Это ошибка сопоставления с образцом или есть какая-то семантика, которую я здесь упускаю?

[править] Я нашел исправление для этого..

Меняем это:

case MessageEnvelope env:

в

case MessageEnvelope _:
    var env = m as MessageEnvelope;

Делает все это работает. Таким образом, возникает вопрос: не должны ли эти строки быть совершенно одинаковыми?

1 ответ

Решение

Это известная ошибка, когда вы фиксируете (в лямбде) переменную шаблона, которая была объявлена ​​в операторе switch. См. https://github.com/dotnet/roslyn/issues/16066

Другие вопросы по тегам