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

后端 未结 24 1934
深忆病人
深忆病人 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:14

    From comments I had many question like: "Why would you ever want to use enum in this way." Since so many of you asked, let me give you my use case and see if you agree then:

    I have a fixed array of items int[n]. Depending on the situation I want to enumerate through this array differently. So i defined:

    int[] Arr= {1,2,34,5,6,78,9,90,30};
    enum eRat1 { A = 0, B=3, C=5, D=8 }; 
    enum eRat2 { A, AA,AAA,B,BB,C,C,CC,D }; 
    
    void walk(Type enumType) 
    { 
       foreach (Type t in Enum.GetValues(enumType)) 
       { 
          write(t.ToString() + " = " + Arr[(int)t)]; 
       }
    } 
    

    and call walk(typeof(eRAt1)) or walk(typeof(eRAt2))

    then i get required output

    1) walk(typeof(eRAt1))

    A = 1
    B = 5
    C = 78
    D = 30
    

    2) walk(typeof(eRAt2))

    A = 1
    AA = 2
    AAA = 34
    B = 5
    BB = 6
    C = 78
    CC = 90
    D = 30
    

    This is very simplified. But i hope, this explains. There are some other advantages to this, as having enum.toString(). So basically i use enums as indexers.

    So using the solution I can do something like this now.

    In sequence eRat1 next value to B is C, but in eRat2 it is BB. So depending on which sequence I am interested in, I can do e.next and depending on enumType I will either get C or BB. How would one achieve that with dictionaries?

    I think this a rather elegant use of enums.

提交回复
热议问题