我想在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中?
答案 0 :(得分:3)
此时,C#7.0功能都没有支持表达式树。您会发现许多显式{@ 3}}的编译器Pull请求(如果您尝试过,则生成诊断)。
如果这对您很重要,我建议您在Roslyn回购中提出问题(我无法找到现有的回复)并获得一些支持。