如何简化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
相关产品推荐
相关产品推荐

