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

Switch Case中能否合并重复代码、分离差异代码?

消除switch分支冗余代码的几种方法

先看你的原代码:

switch(expression) 
{
  case x:
    <a href=https://www.w3schools.com>Visit W3Schools</a>
    for (int i = 3; i >= 0; i--)
    {
      Console.WriteLine(i);
    }
    break;
  case y:
    <a role="link" aria-disabled="true"> Disabled link </a>
    for (int i = 3; i >= 0; i--)
    {
      Console.WriteLine(i);
    }
    default:
      // code block
      break;
}

针对case x和y的重复for循环,有几种方式可以消除冗余:

1. 把重复逻辑抽成独立方法

最直观的方式是把重复的循环代码封装成一个方法,每个case只处理差异的HTML标签,再调用这个方法:

// 提取循环逻辑到单独方法
private void RunCountdown()
{
    for (int i = 3; i >= 0; i--)
    {
        Console.WriteLine(i);
    }
}

// 优化后的switch
switch(expression) 
{
  case x:
    <a href=https://www.w3schools.com>Visit W3Schools</a>
    RunCountdown();
    break;
  case y:
    <a role="link" aria-disabled="true"> Disabled link </a>
    RunCountdown();
    break;
  default:
    // code block
    break;
}

这种方式的好处是代码复用性高,如果后续需要修改循环逻辑,只改一处就行。

2. 合并分支,利用跳转执行共同逻辑

可以让case x处理完自己的HTML标签后,跳转到case y执行循环逻辑,避免重复代码:

switch(expression) 
{
  case x:
    <a href=https://www.w3schools.com>Visit W3Schools</a>
    goto case y; // 跳转到y分支执行循环
  case y:
    for (int i = 3; i >= 0; i--)
    {
      Console.WriteLine(i);
    }
    break;
  default:
    // code block
    break;
}

或者把共同逻辑放到switch外面,通过标签跳过不需要执行的情况:

switch(expression) 
{
  case x:
    <a href=https://www.w3schools.com>Visit W3Schools</a>
    break;
  case y:
    <a role="link" aria-disabled="true"> Disabled link </a>
    break;
  default:
    // code block
    goto EndSwitch; // 跳过循环逻辑
}

// 共同的循环代码,只有x或y时才执行
for (int i = 3; i >= 0; i--)
{
  Console.WriteLine(i);
}
EndSwitch: ;

3. 用模式匹配简化分支(C# 8.0及以上)

如果用的是较新的C#版本,可以用模式匹配直接判断expression是x还是y,再分别处理标签,最后统一执行循环:

if (expression is x or y)
{
    // 根据值输出对应的HTML标签
    if (expression == x)
    {
        <a href=https://www.w3schools.com>Visit W3Schools</a>
    }
    else
    {
        <a role="link" aria-disabled="true"> Disabled link </a>
    }
    // 执行共同循环
    for (int i = 3; i >= 0; i--)
    {
        Console.WriteLine(i);
    }
}
else
{
    // default分支的代码块
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:37:19