private void SelectNextCameraMode() { World.Camera.CameraMode = (CameraActionMode)GetNextEnum<cameraactionmode>(World.Camera.CameraMode); UpdateCameraModeLabel(); } private void SelectNextMouseMode() { this.mouseMode = (MouseMode)GetNextEnum<mousemode>(this.mouseMode); UpdateMouseModeLabel(); } private Enum GetNextEnum<t>(object currentlySelectedEnum) { Type enumList = typeof(T); if (!enumList.IsEnum) throw new InvalidOperationException("Object is not an Enum."); Array enums = Enum.GetValues(enumList); int index = Array.IndexOf(enums, currentlySelectedEnum); index = (index + 1) % enums.Length; return (Enum)enums.GetValue(index); } private Enum GetPreviousEnum<t>(object currentlySelectedEnum) { Type enumList = typeof(T); if (!enumList.IsEnum) throw new InvalidOperationException("Object is not an Enum."); Array enums = Enum.GetValues(enumList); int index = Array.IndexOf(enums, currentlySelectedEnum); index = (((index == 0) ? enums.Length : index) - 1); return (Enum)enums.GetValue(index); }
本文参考http://www.codeproject.com/Tips/244647/Passing-Enum-type-as-a-parameter