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