初投稿です。
C#を使って、音楽プレイヤーライクなものをつくっていました。
その中で、音楽をループさせない「NoLoop」・その一曲だけループさせる「FileLoop」・フォルダー内をループさせる「FolderLoop」の3つの状態が必要になり、ループボタン1つでモードが切り替えられるようにしたかったので、「状態が最後まで行ったら最初の状態に戻す」のを繰り返したく、以下を実装しました。
コードの説明は、まず各モードが書かれたEnumとそのEnumに対し「次の状態」と「前の状態」を取得できるような関数を書いたstaticなクラスを作ってます。
publicclassTest{publicstaticvoidMain(){// Your code here!LoopStatesloopState=LoopStates.NoLoop;System.Console.WriteLine(loopState);loopState=LoopStatesExtension.GetNextState(loopState);System.Console.WriteLine(loopState);loopState=LoopStatesExtension.GetNextState(loopState);System.Console.WriteLine(loopState);loopState=LoopStatesExtension.GetNextState(loopState);System.Console.WriteLine(loopState);loopState=LoopStatesExtension.GetPreviousState(loopState);System.Console.WriteLine(loopState);}}publicenumLoopStates{NoLoop,FileLoop,FolderLoop}publicstaticclassLoopStatesExtension{publicstaticLoopStatesGetNextState(LoopStatesloopState){intMaxNumber=System.Enum.GetValues(typeof(LoopStates)).Length-1;if((int)loopState==MaxNumber)return(LoopStates)System.Enum.ToObject(typeof(LoopStates),0);elsereturn(LoopStates)System.Enum.ToObject(typeof(LoopStates),(int)loopState+1);}publicstaticLoopStatesGetPreviousState(LoopStatesloopState){intMaxNumber=System.Enum.GetValues(typeof(LoopStates)).Length-1;if((int)loopState==0)return(LoopStates)System.Enum.ToObject(typeof(LoopStates),MaxNumber);elsereturn(LoopStates)System.Enum.ToObject(typeof(LoopStates),(int)loopState-1);}}