下一个或上一个枚举

Dav*_*cia 4 c# enums

给定一个已赋值的枚举,给出一个值的下一个或前一个枚举的最佳方法是什么.例如,考虑这个枚举:

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
}
Run Code Online (Sandbox Code Playgroud)

有没有一种好的方法创建一个能够做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];
    }
}
Run Code Online (Sandbox Code Playgroud)

Jim*_*lty 5

你正试图解决错误的问题.这对于简单的枚举来说太复杂了.将枚举重构为类并使用比较接口.

如果这条路线是开放的,你怎么看待这可以通过一个类来实现:

public class TimeFrame: IComparable
{
   private int days;

   public int Days
   {
        set 
        {
             days = value;
        }
   }

   public int CompareTo(object other)
   {
        //see this for implementation -- http://msdn.microsoft.com/en-us/library/system.icomparable.aspx#Mtps_DropDownFilterText
   }


   public string Description
   {
       get code to return the description string , ie "1-3 months"
   }

}
Run Code Online (Sandbox Code Playgroud)