C# 7 模式匹配语义

C# 7 pattern matching semantics

我认为有两个代码块是相等的:

首先是基于 if 的块

然后完全相同,但转换为 switch case over types。 (抱歉 Resharper 红色波浪标记不好,Resharper 还不明白这一点)

基于 switch 的代码将在第一个 return Actor.Done 不是 null 时抛出 Null 引用异常。

这是模式匹配错误还是我在这里缺少某些语义?

[编辑] 我找到了解决方法..

改变这个:

case MessageEnvelope env:

case MessageEnvelope _:
    var env = m as MessageEnvelope;

一切正常。 所以这给我留下了一个问题,这些行不应该完全相同吗?

当您捕获(在 lambda 中)在 switch 语句中声明的模式变量时,这是一个已知错误。参见 https://github.com/dotnet/roslyn/issues/16066