Expression.SwitchCase与C#7模式匹配

时间:2017-10-02 21:14:49

标签: .net linq-expressions c#-7.0

我想在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功能,但是想知道是否所有新语言功能都添加到了Expressions中?

1 个答案:

答案 0 :(得分:3)

此时,C#7.0功能都没有支持表达式树。您会发现许多显式{@ 3}}的编译器Pull请求(如果您尝试过,则生成诊断)。

如果这对您很重要,我建议您在Roslyn回购中提出问题(我无法找到现有的回复)并获得一些支持。