Expression.SwitchCase 使用 C# 7 模式匹配

Expression.SwitchCase with C# 7 pattern matching

我想在 C# 中动态构建代表此代码的 Expression 树:

switch (x)
{
    case A1 cx: Handle(cx); break;
    case A2 cx: Handle(cx); break;
}

到目前为止我有这样的东西:

Expression.Switch(xParameterExpression,
    Expression.SwitchCase(
        method1CallExpression, /* test value expression - what to put here ?? */),
    Expression.SwitchCase(
        method2CallExpression, /* test value expression - what to put here ?? */));

我也可以使用 Expression.TypeAs,但它似乎不起作用。我怀疑我需要一个类似于 if (x is A1 cx) { } 条件表达式而不是 var cx = x as A1;.

我知道这些是 C# 7.0 的新功能,但想知道是否所有新语言功能都已添加到表达式中?

C# 7.0 功能的

None 此时在表达式树中得到支持。您会发现许多明确 handle this 的编译器拉取请求(如果您尝试过,则会产生诊断)。

如果这对您很重要,我建议您在 Roslyn 存储库上提交问题(我找不到现有的)并获得一些支持。