How to get next (or previous) enum value in C#

后端 未结 24 1930
深忆病人
深忆病人 2020-12-04 10:59

I have an enum which is defined like this:

public enum eRat { A = 0, B=3, C=5, D=8 };

So given value eRat.B, I want to get the

24条回答
  •  渐次进展
    2020-12-04 11:20

    Thanks you all, for your inspiration and solutions.

    Here are my results, as an extension.

    public static class Enums
    {
        public static T Next(this T v) where T : struct
        {
            return Enum.GetValues(v.GetType()).Cast().Concat(new[] { default(T) }).SkipWhile(e => !v.Equals(e)).Skip(1).First();
        }
    
        public static T Previous(this T v) where T : struct
        {
            return Enum.GetValues(v.GetType()).Cast().Concat(new[] { default(T) }).Reverse().SkipWhile(e => !v.Equals(e)).Skip(1).First();
        }
    }
    

    use:

    public enum Test { F1, F2, F3 }
    
    public class Program
    {
        public static void Main()
        {
            Test t = Test.F3;   
    
            Console.WriteLine(t);
            Console.WriteLine(t.Next());
            Console.WriteLine(t.Previous());
    
            Console.WriteLine("\n");
    
            t = Test.F1;    
            Console.WriteLine(t);
            Console.WriteLine(t.Next());
            Console.WriteLine(t.Previous());
        }
    }
    

    result:

    F3
    F1
    F2
    
    F1
    F2
    F3
    

提交回复
热议问题