給定一個已分配值的枚舉值,獲取下一個或前一個枚舉值的最佳方法是什麼?例如,考慮此枚舉:下一個或上一個枚舉
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];
}
}
這是使用錯誤的工具進行工作的一個很好的例子 - 因此我的upvote。感謝您發佈一個好問題。 =) – 2009-01-10 00:41:15