我有一个名为“Creature”的课程,它处于几个阶段之一。只有七个阶段,但每个阶段都有不同的时间跨度,将在整个应用程序中使用。我想做类似以下的事情:
enum Stage
{
One,
Two,
Three,
Four,
Five
};
但随后也以某种方式将时间跨度附加到每一个上,这样
Stage.One.Time
返回类似“一小时”的内容。如何做到这一点?
我有一个名为“Creature”的课程,它处于几个阶段之一。只有七个阶段,但每个阶段都有不同的时间跨度,将在整个应用程序中使用。我想做类似以下的事情:
enum Stage
{
One,
Two,
Three,
Four,
Five
};
但随后也以某种方式将时间跨度附加到每一个上,这样
Stage.One.Time
返回类似“一小时”的内容。如何做到这一点?
不幸的是,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;
}
}
这样做的缺点是您现在无法打开阶段:(