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
我认为有两个代码块是相等的:
首先是基于 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