【发布时间】:2009-01-10 00:34:29
【问题描述】:
给定一个已赋值的枚举,在给定值的情况下获取下一个或上一个枚举的最佳方法是什么。例如,考虑这个枚举:
public enum TimeframeType {
None = 0,
[Description("1 month")]
Now = 30,
[Description("1-3 months")]
Short = 90,
[Description("3-6 months")]
Medium = 180,
[Description("6+ months")]
Long = 360
}
有没有一种好方法可以创建一个函数来执行 EnumPrevious(TimeframeType.Short) 返回 TimeframeType.Now 并且 EnumNext(TimeframeType.Short) 将返回 TimeframeType.Medium?
我已经编写了一个丑陋的 EnumNext 实现,但我不相信这是最好的方法。我希望其他人已经解决了这个问题。
public static T EnumNext<T>(T value) where T : struct {
T[] values = (T[])Enum.GetValues(typeof(T));
int i;
for (i = 0; i < values.Length; i++) {
if (object.Equals(value, values[i])) {
break;
}
}
if (i >= values.Length - 1) {
return values[values.Length - 1];
} else {
return values[i + 1];
}
}
【问题讨论】:
-
这是在工作中使用错误工具的一个很好的例子——因此我赞成。感谢您发布一个好问题。 =)