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

如何简化C#单位转换器中的冗长if语句?

简化距离转换器的实现方案

核心思路是用单位-转换系数映射表替代嵌套if,把每个单位与米的换算关系存入字典,通过查表完成单位转换,代码更简洁易维护。

步骤1:定义单位转换系数字典

创建一个字典,存储每个单位对应的1单位等于多少米,不管是转成米还是从米转出,都能直接通过系数计算:

// 以Java为例,其他语言逻辑一致
private static final Map<String, Double> UNIT_TO_METER = new HashMap<>();
static {
    UNIT_TO_METER.put("m", 1.0);
    UNIT_TO_METER.put("mm", 0.001);
    UNIT_TO_METER.put("cm", 0.01);
    UNIT_TO_METER.put("km", 1000.0);
    UNIT_TO_METER.put("mi", 1609.344);
    UNIT_TO_METER.put("in", 0.0254);
    UNIT_TO_METER.put("ft", 0.3048);
    UNIT_TO_METER.put("yd", 0.9144);
}

步骤2:实现Converter方法

方法逻辑分为两步:

  • 先将输入值转换为米:输入值 × 输入单位对应的系数
  • 再将米转换为目标单位:米值 ÷ 目标单位对应的系数

同时加入基础参数校验,避免非法单位输入:

public double convert(double value, String fromUnit, String toUnit) {
    // 校验单位是否合法
    if (!UNIT_TO_METER.containsKey(fromUnit) || !UNIT_TO_METER.containsKey(toUnit)) {
        throw new IllegalArgumentException("不支持的单位类型");
    }
    // 转成米
    double meters = value * UNIT_TO_METER.get(fromUnit);
    // 转成目标单位
    return meters / UNIT_TO_METER.get(toUnit);
}

优势说明

  • 代码结构清晰,无嵌套if,后续新增单位只需在字典里加一行键值对即可
  • 逻辑复用性高,转换逻辑集中在查表和简单运算,减少冗余代码
  • 易于维护和扩展,单位换算系数统一管理,修改时只需调整字典中的值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:55:23