You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expression.SwitchCase匹配异常问题咨询(附MSDN示例代码)

关于Expression.SwitchCase的匹配问题解析

从你贴的代码片段来看,目前的Expression.SwitchCase定义是不完整的,这也是导致匹配逻辑失效的核心原因。我来拆解下关键问题和修复方式:

核心问题:缺少匹配测试值

Expression.SwitchCase的构造要求必须明确指定要匹配的测试值,你的代码里只写了匹配成功后执行的表达式(Console.WriteLine那部分),但没传入对应的匹配常量值——这样Switch语句根本不知道这个Case要匹配什么值,自然无法触发对应的分支逻辑。

比如一个完整合法的SwitchCase应该是这样的:

Expression.SwitchCase(
    // 匹配成功后执行的表达式
    Expression.Call(
        null,
        typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }),
        Expression.Constant("Matched Case 1")
    ),
    // 关键:指定这个Case要匹配的测试值
    Expression.Constant(1)
)

补全后的完整SwitchExpression示例

把你的代码补全后,可正常运行的版本如下:

ConstantExpression switchValue = Expression.Constant(3); 
// 完整的switch表达式(包含默认分支和匹配分支)
SwitchExpression switchExpr = Expression.Switch( 
    switchValue, 
    // 默认分支:没有任何Case匹配时执行
    Expression.Call( 
        null, 
        typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }), 
        Expression.Constant("Default") 
    ), 
    new SwitchCase[] { 
        // 匹配值为1的Case
        Expression.SwitchCase( 
            Expression.Call( 
                null, 
                typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }), 
                Expression.Constant("Matched Value 1")
            ),
            Expression.Constant(1)
        ),
        // 匹配值为3的Case(对应switchValue的值)
        Expression.SwitchCase( 
            Expression.Call( 
                null, 
                typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }), 
                Expression.Constant("Matched Value 3")
            ),
            Expression.Constant(3)
        )
    }
);

// 编译并执行表达式
Expression.Lambda<Action>(switchExpr).Compile()();

额外注意事项

  • 每个SwitchCase可以指定多个匹配值,比如Expression.Constant(2), Expression.Constant(3),这样一个Case会同时匹配多个值
  • Switch语句的匹配逻辑是按顺序检查Case,第一个匹配的Case会被执行,不会继续往下检查后续分支
  • 如果你不需要默认分支,可以把Switch构造的第二个参数设为null,但此时如果没有任何Case匹配,会抛出InvalidOperationException

内容的提问来源于stack exchange,提问作者Rm558

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:20:35