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

如何简化两个case仅参数不同的C# switch语句?

完全可以简化,你这里两个分支的核心差异只有文件名,完全可以把差异部分抽出来,公共逻辑只写一次,有三种常用的实现方案:

方案1:C# 8.0+ 支持的switch表达式(最简洁)

直接通过switch表达式映射出目标文件名,非匹配场景返回空,判断有值再执行添加附件逻辑:

var fileName = data.Subscriber.Protocol switch
{
    "email json" => "Očitanje.json",
    "email text" => "Očitanje.txt",
    _ => null
};

if (fileName != null)
{
    builder.Attachments.Add(fileName, CraftAttachment(data));
}

方案2:兼容旧版本C#的switch写法

如果你的项目用的C#版本低于8.0不支持switch表达式,可以用传统switch先提取后缀:

string fileExt = null;
switch (data.Subscriber.Protocol)
{
    case "email json":
        fileExt = "json";
        break;
    case "email text":
        fileExt = "txt";
        break;
    default:
        break;
}

if (fileExt != null)
{
    builder.Attachments.Add($"Očitanje.{fileExt}", CraftAttachment(data));
}

方案3:字典映射(适合后续扩展)

如果后续可能新增更多协议类型,建议把映射关系提前存在字典里,后续新增只需要改字典配置即可,不用修改逻辑代码:

// 可以提前定义为全局静态只读的映射字典
private static readonly Dictionary<string, string> ProtocolExtensionMap = new Dictionary<string, string>
{
    { "email json", "json" },
    { "email text", "txt" }
};

// 业务逻辑处调用
if (ProtocolExtensionMap.TryGetValue(data.Subscriber.Protocol, out var ext))
{
    builder.Attachments.Add($"Očitanje.{ext}", CraftAttachment(data));
}

以上方案都避免了重复编写Attachments.Add的相同逻辑,后续要修改附件添加规则只需要改一处即可,可维护性更高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:36:01