枚举是否表示对象状态?

apu*_*juh 1 .net c# enums

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

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

谢谢!

fhn*_*eer 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();
}
Run Code Online (Sandbox Code Playgroud)