0

我有一个名为“Creature”的课程,它处于几个阶段之一。只有七个阶段,但每个阶段都有不同的时间跨度,将在整个应用程序中使用。我想做类似以下的事情:

enum Stage
    {
    One,
    Two,
    Three,
    Four,
    Five
    };

但随后也以某种方式将时间跨度附加到每一个上,这样

Stage.One.Time 

返回类似“一小时”的内容。如何做到这一点?

4

1 回答 1

1

不幸的是,C# 中的枚举非常有限。不过,您有几个选择:

  • 创建可以添加您想要的任何逻辑的扩展方法。然后你可以写:

    Stage.One.ToTimeSpan()
    

    ToTimeSpan扩展方法在哪里,可能使用 aDictionary<Stage, TimeSpan>或 switch 语句)

  • 编写一个“智能”枚举,它实际上只是一个具有一组有限值的类型:

    public sealed class Stage
    {
        public static readonly Stage One = new Stage(TimeSpan.FromHours(1));
        public static readonly Stage Two = new Stage(TimeSpan.FromHours(5));
        // ...
    
        private readonly TimeSpan time;
        public TimeSpan Time { get { return time; } }
    
        private Stage(TimeSpan time)
        {
            this.time = time;
        }
    }
    

    这样做的缺点是您现在无法打开阶段:(

于 2013-03-03T17:55:26.137 回答