Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- public class IncrementalSelection<T> where T : struct, IConvertible // reject all types other than enum
- {
- public T selectedItem{ get; private set;}
- public IncrementalSelection(T initialSelection)
- {
- if (!typeof(T).IsEnum)
- {
- throw new ArgumentException("T must be an enumerated type"); // reject all types other than enum
- }
- selectedItem = initialSelection;
- }
- public void Increment()
- {
- selectedItem = (T)(object)(((int)(object)selectedItem)+1);
- if((int)(object)selectedItem >= Enum.GetNames(typeof(T)).Length)
- {
- selectedItem = (T)Enum.GetValues(typeof(T)).GetValue(0);
- }
- }
- }
- public class Program
- {
- enum Focus {
- Narrow,
- Normal,
- Wide
- };
- public static void Main()
- {
- var focus = new IncrementalSelection<Focus>(Focus.Normal);
- System.Console.WriteLine(Enum.GetName(typeof(Focus), focus.selectedItem));
- focus.Increment();
- System.Console.WriteLine(Enum.GetName(typeof(Focus), focus.selectedItem));
- focus.Increment();
- System.Console.WriteLine(Enum.GetName(typeof(Focus), focus.selectedItem));
- focus.Increment();
- System.Console.WriteLine(Enum.GetName(typeof(Focus), focus.selectedItem));
- focus.Increment();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement