为什么C#8的switch表达式在表达式树中无效?

Ale*_*lex 5 c# expression expression-trees c#-8.0

考虑 AutoMapper 中的以下代码

CreateMap<ViewModel, ServiceModel>()
    .ForMember(
        x => x.Type,
        opt => opt.MapFrom(y =>
            y.TypeName switch
            {
                "FirstName" => typeof(FirstModel),
                "SecondName" => typeof(SecondModel),
                _ => null
            }));
Run Code Online (Sandbox Code Playgroud)

我有几种不同的情况,我想为每个字符串返回特定类型。

编译器不同意:

表达式树不能包含 switch 表达式。

这是为什么?我希望这个功能(在内部被巧妙地称为表达式)执行Expression.Switch,因此应该可以在表达式树中使用。

我知道我可以用三元运算符语法替换。我想了解为什么它不起作用。

编辑

感谢Sweeper指出这实际上不是一个 switch 表达式。我想我是被带上了会议列车并被名字愚弄了。

Ivan Stoev我知道它不受支持,但我很好奇为什么。我理解为什么不支持块作用域,但 switch case 本质上非常简单且具有声明性,这非常适合表达式树。

编辑 2 感谢下面的Jeroen Mostert评论,我现在了解到 switch case 内部远非简单,因此它在表达式树中没有位置。