枚举是否适合指示对象状态?

Are enum good to indicate object state?

我当前项目的首席开发人员禁止我使用任何枚举。他声称枚举只是问题。我只能在被迫时使用它 - 当与需要枚举的外部 applications/libraries 通信时。 他说我应该对每个州都有反对意见。例如,我们有一个对象为 Soldier 的游戏。所以我必须有对象: - 奔跑的士兵 - 坐着的士兵 - 常备士兵

他说的对吗?我感觉不到。我只有我不想写那么多的论点类。

谢谢!

对于您的情况,枚举很糟糕。因为我认为 RunningSoldier 与其他类型的士兵会有不同的 properties/methods。如果你有一个状态枚举,那么在你的每个方法中你都会有一个 if/else/switch 条件。所以你的方法会很大而且更难维护。所以最好有不同的 classes 和一个基础士兵 class(OOP 概念)。

更新:

如果您需要为士兵添加其他类型,那么添加 class 会比枚举更容易。至于枚举,你必须经历所有的方法(移动、跳跃、开火等)。但是对于 class 的情况,很容易添加一个新的 class 并实现这些方法。漂亮又简单。

在某些其他情况下,枚举可能比单独的 class 更好。例如 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();
}