枚举是否表示对象状态?

时间:2015-01-21 11:30:13

标签: c# .net enums

我当前项目中的首席开发人员禁止使用任何枚举。他声称枚举只是问题。只有当我被迫时才能使用它 - 当与需要枚举的外部应用程序/库进行通信时。 他说我应该对每个州都有对象。例如,我们有对象Soldier的游戏。所以我必须有对象: - RunningSoldier - SittingSoldier - StandingSoldier

他是对的吗?我感觉不到。我只有像我不想写这么多课程的论点。

谢谢!

1 个答案:

答案 0 :(得分:5)

对于你的情况,枚举很糟糕。因为我认为RunningSoldier将拥有与其他类型士兵不同的属性/方法。如果你有一个状态的枚举,那么在你的每个方法中你将有一个if / else / switch条件。所以你的方法会很庞大,难以维护。因此,最好使用基础Soldier类(OOP概念)来创建不同的类。

<强>更新

如果你需要为士兵添加另一种类型,那么添加一个类将比枚举更容易。至于枚举,你必须经历所有方法(移动,跳跃,射击等)。但是对于类的情况,很容易添加一个新类并实现这些方法。很好,很容易。

在某些其他情况下,枚举可能比单独的类更好。例如,对于CurrencyType或Units,枚举。我的代码中有一个方法,它接受两个枚举并从一个

转换值
public static double ConvertUnits(this double original, SimplifiedUnits sourceUnits, SimplifiedUnits targetUnits)
{
    if (sourceUnits == targetUnits || sourceUnits == SimplifiedUnits.Unknown)
    return original;
    if (sourceUnits == SimplifiedUnits.Feet && targetUnits == SimplifiedUnits.Meters)
    return original * GeometryConstants.MetersPerFoot;
    if (sourceUnits == SimplifiedUnits.Meters && targetUnits == SimplifiedUnits.Feet)
    return original / GeometryConstants.MetersPerFoot;
        throw new NotSupportedException();
}