如何用Int和Timespan建模“阶段” - 自定义枚举?

时间:2013-03-03 17:51:21

标签: c#

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

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

然后还以某种方式将Timespan附加到其中每一个,以便

Stage.One.Time 

返回类似“一小时”的内容。怎么能实现这一目标?

1 个答案:

答案 0 :(得分:1)

不幸的是,C#中的枚举非常有限。你有两个选择:

  • 创建可以添加所需逻辑的扩展方法。然后你可以写:

    Stage.One.ToTimeSpan()
    

    (其中ToTimeSpan是扩展方法,可能使用Dictionary<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;
        }
    }
    

    这样做的缺点是你现在无法开启舞台:(