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