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 存储库上提交问题(我找不到现有的)并获得一些支持。
我想在 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 的新功能,但想知道是否所有新语言功能都已添加到表达式中?
None 此时在表达式树中得到支持。您会发现许多明确 handle this 的编译器拉取请求(如果您尝试过,则会产生诊断)。
如果这对您很重要,我建议您在 Roslyn 存储库上提交问题(我找不到现有的)并获得一些支持。