C#中switch case使用变量作为分支条件出现“A constant value is expected”错误的解决办法咨询
解决C# Switch Case中“A constant value is expected”错误(无需if语句)
嘿,这个问题我之前踩过坑!C#的switch语句要求case后面必须跟编译时常量,所以你直接用变量int2当case值才会触发CS0150错误。不过不用if的话,确实有办法实现类似逻辑,给你两个实用方案:
方案1:使用C# 7.0+的模式匹配(支持运行时变量)
从C# 7.0开始,switch支持带when从句的模式匹配,完美解决运行时变量匹配的问题,代码示例:
int int1 = 1; int int2 = 2; switch(int1) { case var value when value == int2: doSomething(); break; // 可以添加其他case分支 default: // 默认逻辑 break; }
这里var value会匹配int1的任何值,然后通过when条件判断是否等于int2,完全绕开了常量要求,而且还是纯switch结构,不用写if。
方案2:将变量改为编译时常量(仅适用于固定值场景)
如果int2的值是编译时就能确定的固定值,那直接把它声明为const常量就行,这样就能正常在case里使用了:
int int1 = 1; const int int2 = 2; // 改为const常量 switch(int1) { case int2: doSomething(); break; default: break; }
这个方案更简洁,但只适合int2的值不会在运行时改变的情况。
总结
- 要是
int2是运行时动态变化的变量:用带when的模式匹配switch - 要是
int2是固定不变的值:把它改成const常量直接用
内容的提问来源于stack exchange,提问作者RamenNoodle93
相关产品推荐
相关产品推荐

