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

C#中如何替代Switch语句简化多列表选择逻辑?

简化C#多分支Switch逻辑的两种方案

一、完全替代Switch:用字典映射消除分支

核心思路是把类型字符串和对应的列表做键值对绑定,通过字典直接查找目标列表,统一执行处理逻辑,彻底告别冗长的Switch分支,后续新增类型只需在字典里加一行即可。

实现步骤:

  1. 在类中初始化字典(建议在构造函数里只初始化一次,提升性能):
private readonly Dictionary<string, IEnumerable<string>> _gudListMap;

public YourClassName()
{
    _gudListMap = new Dictionary<string, IEnumerable<string>>
    {
        {"SGUD", SGUD_List_from_TreeWriter},
        {"MGUD", MGUD_List_from_TreeWriter},
        {"UGUD", UGUD_List_from_TreeWriter},
        {"GUD4", GUD4_List_from_TreeWriter},
        {"GUD5", GUD5_List_from_TreeWriter},
        {"GUD6", GUD6_List_from_TreeWriter},
        {"GUD7", GUD7_List_from_TreeWriter},
        {"GUD8", GUD8_List_from_TreeWriter},
        {"GUD9", GUD9_List_from_TreeWriter}
        // 新增类型直接追加键值对
    };
}
  1. 修改Split_List方法:
public void Split_List()
{
    string selectedType = TagService.NC_GUD_selected_type[index_];
    
    if (_gudListMap.TryGetValue(selectedType, out var targetList))
    {
        // 和原逻辑一致的循环处理
        for (int m = 0; m < targetList.LongCount(); m++)
        {
            Split_GUD_attr = targetList.ElementAt(m).Split(';');
            k = m;
        }
    }
    else
    {
        // 可选:处理未知类型的场景,比如抛出异常或设置默认值
        // throw new ArgumentOutOfRangeException(nameof(selectedType), "未定义的GUD类型");
    }

    GUD_List_to_screen = Split_GUD_attr[0] + Split_GUD_attr[6] + "  (" + Split_GUD_attr[1] + ")";
    CNC_GUD_Out_Array_total[index_, k] = GUD_List_to_screen;
}

二、必须用Switch时:抽离重复逻辑缩短分支

如果业务限制必须保留Switch,可以把每个分支里重复的循环逻辑抽成独立方法,让Switch分支只做列表传递,大幅精简代码。

实现步骤:

  1. 抽离重复逻辑到单独方法:
private void ProcessGudList(IEnumerable<string> targetList)
{
    for (int m = 0; m < targetList.LongCount(); m++)
    {
        Split_GUD_attr = targetList.ElementAt(m).Split(';');
        k = m;
    }
}
  1. 简化后的Switch分支:
public void Split_List()
{
    switch (TagService.NC_GUD_selected_type[index_])
    {
        case "SGUD": ProcessGudList(SGUD_List_from_TreeWriter); break;
        case "MGUD": ProcessGudList(MGUD_List_from_TreeWriter); break;
        case "UGUD": ProcessGudList(UGUD_List_from_TreeWriter); break;
        case "GUD4": ProcessGudList(GUD4_List_from_TreeWriter); break;
        case "GUD5": ProcessGudList(GUD5_List_from_TreeWriter); break;
        case "GUD6": ProcessGudList(GUD6_List_from_TreeWriter); break;
        case "GUD7": ProcessGudList(GUD7_List_from_TreeWriter); break;
        case "GUD8": ProcessGudList(GUD8_List_from_TreeWriter); break;
        case "GUD9": ProcessGudList(GUD9_List_from_TreeWriter); break;
        // 新增类型只需追加一行调用
        default:
            // 处理未知类型
            break;
    }

    GUD_List_to_screen = Split_GUD_attr[0] + Split_GUD_attr[6] + "  (" + Split_GUD_attr[1] + ")";
    CNC_GUD_Out_Array_total[index_, k] = GUD_List_to_screen;
}

额外提示

原代码中的循环逻辑会每次覆盖Split_GUD_attr,最终只有列表最后一个元素的拆分结果会被保留,k也会是最后一个元素的索引。如果你的真实需求是处理每个元素并更新数组,需要把数组赋值逻辑移到循环内部。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:55:34