我有一个名为“Creature”的类,它处于几个阶段之一。只有七个阶段,但每个阶段都有不同的时间跨度,将在整个应用程序中使用。我想做类似以下的事情:
enum Stage
{
One,
Two,
Three,
Four,
Five
};
然后还以某种方式将Timespan附加到其中每一个,以便
Stage.One.Time
返回类似“一小时”的内容。怎么能实现这一目标?
答案 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;
}
}
这样做的缺点是你现在无法开启舞台:(