首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下一个或上一个枚举

下一个或上一个枚举
EN

Stack Overflow用户
提问于 2009-01-10 00:34:29
回答 5查看 4.5K关注 0票数 4

给定一个已赋值的枚举,获取给定值的下一个或前一个枚举的最佳方法是什么?例如,考虑下面的枚举:

代码语言:javascript
复制
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实现,但我不相信这是最好的方法。我希望其他人已经解决了这个问题。

代码语言:javascript
复制
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];
    }
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-01-10 00:38:33

您正在尝试解决错误的问题。对于简单的枚举来说,这太复杂了。将枚举重构为一个类,并使用比较接口。

如果这个路径对你开放,看看这个类是如何实现的:

代码语言:javascript
复制
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"
   }

}
票数 5
EN

Stack Overflow用户

发布于 2009-01-10 00:39:10

.NET中的枚举实际上并不是用来排序的,所以你不应该依赖它。之后,其他人可能只是在中间的某个位置添加了一个值,这将是无序的。因此,也没有内置这样的功能。您可以编写自己的函数(类似于您已经编写的函数),但这完全取决于您。我也建议你在你的方法中自己进行排序,而不是依靠.NET来保持项目的“排序”。

补充道:,我也赞同你应该选择另一种数据结构的观点。

票数 2
EN

Stack Overflow用户

发布于 2009-01-10 00:42:30

据我所知,没有内置的方法来做到这一点,而且你的解决方案看起来很棒-假设枚举是这里使用的正确结构……

我确实认为您正在尝试使用枚举做更多的事情。也许TimeframeType应该是一个类,或者应该有一个静态的时间范围数据数组?

(刚刚看到了吉米的帖子-看起来我们有类似的观点)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/430264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档