Учитывая перечисление, которое присвоено значениям, каков наилучший способ получить следующее или предыдущее перечисление с учетом значения. Например, рассмотрите это перечисление:
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];
}
}