C#7模式匹配语义

C#7模式匹配语义,c#,pattern-matching,c#-7.0,C#,Pattern Matching,C# 7.0,我认为这两段代码是相等的: 首先是基于if的块 然后完全相同,但转换为切换大小写类型。 (抱歉,错误的Resharper红色扭曲标记,Resharper还不明白这一点) 基于开关的代码将在第一个返回Actor.Done上抛出一个Null引用异常,该异常不是Null 这是一个模式匹配错误还是我在这里缺少了一些语义 [编辑] 我已经找到了解决办法 更改此选项: case MessageEnvelope env: 到 让一切顺利。 这就给我留下了一个问题,这些行不应该完全相同吗?当您捕获(在la

我认为这两段代码是相等的:

首先是基于
if
的块

然后完全相同,但转换为切换大小写类型。 (抱歉,错误的Resharper红色扭曲标记,Resharper还不明白这一点)

基于开关的代码将在第一个
返回Actor.Done
上抛出一个Null引用异常,该异常不是Null

这是一个模式匹配错误还是我在这里缺少了一些语义

[编辑] 我已经找到了解决办法

更改此选项:

case MessageEnvelope env:

让一切顺利。
这就给我留下了一个问题,这些行不应该完全相同吗?

当您捕获(在lambda中)switch语句中声明的模式变量时,这是一个已知的错误。请参见

第一个是比较“已启动”,第二个是比较“已启动.msg”。否。“msg”是patternmatch中类型化变量的名称。。。其中没有“.”。您是否尝试在开关内使用断点查看实际值?是的,我有正确的值,但直接在“大小写”匹配中抛出。我看不到图像中红线后面的内容。不管是什么情况,在第一种情况和第二种情况下,你不会比较相同的东西。
case MessageEnvelope _:
    var env = m as MessageEnvelope;