Получить следующий элемент в Enum и вернуться первым, если последний + 1 - PullRequest
0 голосов
/ 08 ноября 2018

Я видел Как получить следующее (или предыдущее) значение перечисления в C # и задавался вопросом, может ли это также вернуть первый элемент, если следующий элемент будет (последний + 1). Итак, представьте:

public enum MODE {
    OFF,
    CHANNEL,
    TALKING
}

MODE Mode = MODE.OFF;

Mode = Mode.Next(); // should give me MODE.CHANNEL
Mode = Mode.Next(); // should give me MODE.TALKING
Mode = Mode.Next(); // should give me MODE.OFF

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Может быть, это может быть полезно:

    static void Main(string[] args)
    {
        MODE Mode = MODE.TALKING; //Whatever value;
        int index = (int)Mode;
        index = ++index % 3;
        Mode = (MODE)index;
        Console.WriteLine("Mode value {0} ; index {1}", Mode, index );
        Console.ReadKey();

    }
0 голосов
/ 08 ноября 2018

Добавить по модулю арифметики к ответу Хусайта

Как получить следующее (или предыдущее) значение перечисления в C #

Код:

public static class Extensions {
  public static T Next<T>(this T src) where T : struct {
    if (!typeof(T).IsEnum)
      throw new ArgumentException(String.Format("Argument {0} is not an Enum", 
                                                 typeof(T).FullName));

    T[] Arr = (T[])Enum.GetValues(src.GetType());

    int j = (Array.IndexOf<T>(Arr, src) + 1) % Arr.Length; // <- Modulo % Arr.Length added

    return Arr[j];
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...