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

如何在C#的switch→case语句中使用经过修改的字符串?

问题分析与解决方案

核心问题

C# 的 switch-case 要求case标签必须是编译时常量——也就是编译器在编译阶段就能确定值的表达式。你遇到的两个错误本质都是因为:

  • Constants.myString.ToLower() 这类方法调用是运行时计算的结果,不属于编译时常量,无法直接作为case标签
  • 试图将方法调用结果赋值给const局部变量也不可行,因为const要求初始化值必须是编译期能确定的常量表达式

可行解决方案

方案1:提前定义所有需要的变体为常量(推荐)

既然原字符串是全局常量,直接把所有需要的预修改变体也定义为const,放在Constants类中:

public static class Constants
{
    public const string BaseString = "The Quick Brown Fox";
    // 预定义所有需要的变体
    public const string LowercaseString = "the quick brown fox";
    public const string UppercaseString = "THE QUICK BROWN FOX";
    public const string ReplacedSpaceString = "The+Quick+Brown+Fox";
}

之后在switch中直接使用这些常量:

switch(some_value)
{
    case Constants.LowercaseString:
        // 小写匹配逻辑
        break;
    case Constants.UppercaseString:
        // 大写匹配逻辑
        break;
    case Constants.ReplacedSpaceString:
        // 替换空格后的匹配逻辑
        break;
    default:
        // 默认逻辑
        break;
}

优点:完全符合C#语法要求,编译期检查,性能最优;缺点:若原字符串需要修改,需同步更新所有变体(但常量本身就是设计为不频繁修改的)。

方案2:使用if-else或switch表达式的when模式

如果不想预定义所有变体,可以改用if-else链,或者C# 8.0+支持的switch表达式when子句,它们允许运行时计算的判断条件:

用if-else实现:

var baseStr = Constants.BaseString;
if (some_value == baseStr.ToLower())
{
    // 小写匹配逻辑
}
else if (some_value == baseStr.ToUpper())
{
    // 大写匹配逻辑
}
else if (some_value == baseStr.Replace(' ', '+'))
{
    // 替换空格后的匹配逻辑
}
else
{
    // 默认逻辑
}

用switch表达式的when模式实现:

var baseStr = Constants.BaseString;
var result = some_value switch
{
    var s when s == baseStr.ToLower() => /* 小写匹配后的返回值/逻辑 */,
    var s when s == baseStr.ToUpper() => /* 大写匹配后的返回值/逻辑 */,
    var s when s == baseStr.Replace(' ', '+') => /* 替换空格后的返回值/逻辑 */,
    _ => /* 默认返回值/逻辑 */
};

优点:无需预定义所有变体,原字符串修改时自动同步变体;缺点:运行时判断,性能略低于常量匹配,但绝大多数场景下可以忽略。

为什么原写法报错

  • CS0426:虽然你定义了Constants.myString,但case标签不允许直接调用方法(哪怕是常量的方法),编译器会误判你试图访问Constants类的myString类型(而非字段),因此报错类型不存在。
  • CS9135:const局部变量的初始化值必须是编译时常量,而ToLower()等方法的返回值是运行时计算的,不符合常量要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:52:36